我想在 Linux 上使用动态库运行基于 Qt 5 的应用程序。总之,脚本将复制可执行文件和其他相关文件,包括 a 中所有必需的 .solib
文件夹,到所需的目的地和脚本调用gksudo
将作为应用程序的调用者。
到目前为止,一切正常,直到我调用可执行脚本:应用程序无法运行。当我要求一起跑步时sudo
,它告诉我缺少一个库(Qt5SerialPort...)。跑步ldd
在实际的可执行文件中,我发现该应用程序正在获取所需的库,而不是从lib
文件夹,但有一些明显的硬编码路径。
我试图通过使用来解决这个问题qt.conf
但没有成功。如注here, 看上去qt.conf
实际上不应该这样工作。咨询Qt 文档,我决定使用LD_LIBRARY_PATH
告诉链接器在哪里可以找到库,因为我已经使用脚本来运行应用程序了。所以最终总结的脚本代码是
#!/bin/sh
LD_LIBRARY_PATH=lib/
export LD_LIBRARY_PATH
sudo ldconfig #sometimes sudo /sbin/ldconfig -v
gksudo "$INSPATH/myApp" #or sudo instead
问题是它仍然不起作用。当我打电话时echo $LD_LIBRARY_PATH
,我可以看到变量已正确编辑,但是当我调用运行行(使用 sudo)时,它一直告诉我找不到 lib。
我缺少什么?
sudo
没有通过LD_LIBRARY_PATH
:
$ LD_LIBRARY_PATH=lib/
$ export LD_LIBRARY_PATH
$ env | grep LD_LIBRARY_PATH
LD_LIBRARY_PATH=lib/
$ sudo env | grep LD_LIBRARY_PATH
您可以将其设置为以 root 身份运行的命令:
$ sudo env LD_LIBRARY_PATH=/lib env | grep LD_LIBRARY_PATH
SUDO_COMMAND=/usr/bin/env LD_LIBRARY_PATH=/lib env
LD_LIBRARY_PATH=/lib
你会想要类似的东西
sudo env LD_LIBRARY_PATH=/lib "$INSPATH/myApp"
一如既往,要小心sudo
!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)