5

我刚刚偶然发现了一些奇怪的行为:在我启动我的应用程序之前,我已经将 LD_LIBRARY_PATH 设置为一些包含所有需要的库的本地库目录。启动后,我从 LD_LIBRARY_PATH 加载了部分(大部分)库,但从标准 /usr/lib 加载了一些库(例如 /usr/lib/libQtNetwork.so.4、/usr/lib/libSM.so。 6)。所有这些库都包含在 LD_LIBRARY_PATH 中列出的目录中。谁能解释我为什么会有这样的行为?我对 Linux 世界不是很熟悉,但这篇文章说我的方法应该可行

PS 如果我将 /usr/libs 重命名为其他名称,我的应用程序将使用从我的库位置使用的所有库运行

预先感谢!

4

2 回答 2

3

I've found the answer and the answer is RPATH. All Qt libraries are built with RPATH=$QT_INSTALL_DIR so the RPATH should be removed if you want to create "bundle" in Linux. RPATH can be removed by invoking chrpath command. Thanks all for help!

于 2011-03-21T09:51:20.590 回答
1

好的,看来您正在使用 Qt,但同样的原则也适用并且不是 Qt 特定的。

首先要看的是你的PATH环境变量,然后是 QTDIR,然后是LD_LIBRARY_PATH

通常你不需要“玩”LD_LIBRARY_PATH。如果你的 PATH 是正确的,那么你应该没问题。

附带说明(您可能知道):要查看使用的库,您可以使用ldd命令。例如:

user@host:~/$ ldd $QTDIR/bin/qmake 
linux-vdso.so.1 =>  (0x00007fff169ff000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fb6bf63e000)
libm.so.6 => /lib/libm.so.6 (0x00007fb6bf3bb000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fb6bf1a3000)
libc.so.6 => /lib/libc.so.6 (0x00007fb6bee20000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb6bf97e000)

假设您的QTDIR 环境变量已设置。如果你有 QT,如果安装了 qmake 的 linux 发行版将在路径中。如果您进行了自定义安装或编译,则需要设置路径。

祝你好运。

于 2011-03-20T15:06:44.087 回答