gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:43 25 4
gpt4 key购买 nike

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

到目前为止一切正常,直到我调用可执行脚本:应用程序没有运行。当我要求使用 sudo 运行时,它告诉我缺少一个库 (Qt5SerialPort...)。在实际的可执行文件上运行 ldd 我发现应用程序不是从 lib 文件夹中获取所需的库,而是从一些明显的硬编码路径中获取。

我尝试使用 qt.conf 来解决这个问题,但没有成功。作为注释 here ,看起来 qt.conf 实际上不应该以这种方式工作。咨询Qt documentation ,我决定使用 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!

关于linux - 尝试运行 Qt 应用程序时 LD_LIBRARY_PATH 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34155856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com