关于qt:为什么更改LD_LIBRARY_PATH在Ubuntu中没有效果?

Why changing LD_LIBRARY_PATH has no effect in Ubuntu?

我试图在Ubuntu 16.04上部署我的应用程序。所以我做了一个具有以下层次结构的包-

1
2
3
4
5
6
7
8
9
10
Package
|
----bin
    |
    -----application
    -----application.sh
    -----Qt
         |
         -----necessary qt libraries
         -----platforms

这是application.sh文件-

1
2
3
#!/bin/sh
export LD_LIBRARY_PATH=`pwd`/Qt
./application

当我执行application.sh文件时,它显示它找不到libQt5MultimediaWidgets.so.5文件。但它在Qt文件夹中。另外,当我在导出LD_LIBRARY_PATH后从application.sh文件打印ldd application时,它给出了以下输出-

enter image description here请检查标记的零件。有人能解释一下为什么在导出LD_LIBARRY_PATH之后仍然没有找到Qt文件夹中的库吗?

编辑:

所以按照@zang的建议,我已经检查了调试日志,这里是-

请检查标记的零件。

enter image description here

它似乎在尝试实际的libQt5MultimediaWidgets.so,然后报告说它找不到它。有人能帮我了解这里发生了什么吗?

edit-2:根据@tarun的建议,我在qt文件夹上运行了ls -al。这是输出-

enter image description here


qt目录中的所有文件实际上都是指向同一目录中不存在的文件的Simlinks,因此找不到它们。


弗斯特

可能是PWD不在你想象的位置吗?

您可以尝试添加

1
2
3
4
# Figure out where the application.sh script is located
scriptpath="$( cd"$(dirname"$0")" ; pwd -P )"
# Make sure our pwd is that location
cd "$scriptpath"

在脚本的顶部(假设从这里开始是bash shell)

这样,qt文件夹的所有相对路径都将有效。

第二

也许您应该考虑导出新的ld_库路径,如(从这里)所示:

1
2
LD_LIBRARY_PATH=whatever
export LD_LIBRARY_PATH

第三

在更改变量(从这里)后,运行ldconfig命令让ld更新可能会很有用:

1
sudo ldconfig


如果你看你的ls -al的输出

ls -al output

这些是你拥有的软链接。您的软链接libQt5MultimediaWidgets.so.5指向同一目录中的libQt5MultimediaWidgets.so.5.9.2,文件根本不在那里。因此,您需要设置正确的软链接路径或将文件放在同一目录中


根据所示屏幕截图,/Desktop/package/bin/Qt中不存在文件libQt5MultimediaWidgets.so