当前位置:  开发笔记 > 运维 > 正文

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

如何解决《尝试运行Qt应用程序时LD_LIBRARY_PATH失败》经验,为你挑选了1个好方法。

我想在Linux上运行基于Qt 5的应用程序usind动态库.总之,脚本会将可执行文件和其他相关文件(包括lib文件夹中所有必需的.so)复制到所需目标,并且脚本调用gksudo将作为应用程序的调用者.

直到我调用可执行脚本直到现在一切正常:应用程序无法运行.当我要求运行时sudo,它告诉我库(Qt5SerialPort ...)丢失了.运行ldd实际的可执行文件我发现应用程序正在从lib文件夹中获取所需的库,但是一些明显的硬编码路径.

我尝试通过使用解决这个问题,qt.conf但没有成功.在这里注意,似乎qt.conf实际上并不应该以这种方式工作.咨询Qt文档,我决定用LD_LIBRARY_PATH链接器告诉链接器在哪里找到libs,因为我已经使用脚本来运行应用程序了.所以最终的,总结的脚本代码是

#!/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.

我错过了什么?



1> Toby Speight..:

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!

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有