微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试运行Qt应用程序时LD_LIBRARY_PATH失败

我想在Linux上运行一个基于Qt 5的应用程序。 总而言之,脚本会将可执行文件和其他相关文件包括lib文件夹中所有需要的.so)复制到所需的目的地,调用gksudo的脚本将作为调用者应用程序。

直到现在一切工作正常,直到我呼吁可执行脚本:应用程序不运行。 当我要求使用sudo运行时,它告诉我缺less一个库(Qt5SerialPort …)。 在实际的可执行文件上运行ldd我发现应用程序不是从lib文件夹中获取所需的库,而是一些明显的硬编码path。

我试图通过使用qt.conf来解决这个问题,但没有成功。 就像这里 qt.conf那样,看起来qt.conf实际上并不是这样工作的。 咨询Qt文档 ,我决定使用LD_LIBRARY_PATH告诉链接器在哪里find库,因为我已经在使用脚本来运行应用程序了。 所以最后的总结脚本代码

#!/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 ,我可以看到这个variables是正确编辑的,但是当我调用运行行(使用sudo)时,它一直告诉我没有findlib。

使用variables名创build一个数组bash,unix

链接链接.so文件时是否有性能损失?

如何将c ++程序编译到共享库中,并从ac程序中加载它?

__libc_start_main @ plt如何工作?

运行时链接库的全局variables之间共享使用dlopen加载的插件

我错过了什么?

在我自己的过程中find一个符号

C ++ linux:dlopen无法find.so

Linux不能finddynamic链接的应用程序

当符号存在时,无法在.so文件链接符号

可以使用压缩的dll(s)吗?

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 !

这是一个真正的Linux问题。 最好的解决方案是明确地设置可执行文件中的库位置,但这不是那么简单。

Linux应用程序可以在创建所谓的桌面文件时启动。 所有主要的软件公司,如Google,都会通过安装脚本在用户的桌面或菜单中创建产品的桌面文件。 问题是桌面文件需要应用程序的硬编码位置。 这意味着在安装这个位置的时候必须询问并设置在桌面文件中。 另外,桌面文件是不能设置LD_LIBRARY_PATH的文本文件

一个解决方法它。 它不赢得选美比赛,但它的作品。 可以始终通过脚本启动应用程序,并且此脚本可以在运行应用程序之前设置LD_LIBRAREY_PATH。 但用户可能不喜欢运行/点击“application.sh”脚本。 他们希望通过双击应用程序文件来运行它。 我们通过以下方式来解决这个问题:执行脚本时,我们知道应用程序的文件位置。 所以我们先让脚本生成桌面文件,然后执行应用程序。 桌面文件执行脚本。 但是,您可以设置桌面文件名称和图标,这对用户来说是透明的。

最终的结果是用户必须单击一次shell脚本,然后才能点击一个真正的应用程序快捷方式文件

详情请参阅 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐