我试图在Ubuntu 16.04
上部署我的应用程序。所以我制作了一个包含以下层次结构的包 -
Package
|
----bin
|
-----application
-----application.sh
-----Qt
|
-----necessary qt libraries
-----platforms
这是application.sh
文件 -
#!/bin/sh
export LD_LIBRARY_PATH=`pwd`/Qt
./application
当我执行application.sh
文件时,它显示我无法找到libQt5MultimediaWidgets.so.5
文件。但它在Qt
文件夹中。此外,当我在导出ldd application
后从application.sh
文件打印LD_LIBRARY_PATH
时,它给了我以下输出 -
请检查标记的部分。任何人都可以解释为什么即使在导出Qt
后找不到LD_LIBARRY_PATH
文件夹中的库?
编辑:
所以正如@Zang建议的那样,我检查了调试日志,这里是 -
请检查标记的部分。
看起来它实际上正在尝试实际的libQt5MultimediaWidgets.so
然后报告它无法找到它。有谁能帮我理解这里发生的事情?
编辑-2:根据@Tarun的建议,我在Qt文件夹上运行了ls -al
。这是输出 -
您的Qt目录中的所有文件实际上是同一目录中不存在的文件的simlink,因此无法找到它们。
第一
可能是pwd不在你认为的地方吗?
你可以尝试添加
# 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,来自here)
通过这样做,Qt文件夹的所有相对路径都是有效的。
第二
也许你应该考虑导出你的新LD_LIBRARY_PATH,就像这样(来自qazxsw poi):
here
第三
在更改变量(来自LD_LIBRARY_PATH=whatever
export LD_LIBRARY_PATH
)后,为ld运行ldconfig命令可能很有用:
here
根据显示的屏幕截图,文件sudo ldconfig
不存在于libQt5MultimediaWidgets.so
中。