我偶然发现了一些奇怪的行为:在启动应用程序之前,我将LD_LIBRARY_PATH设置为某个本地lib目录,其中包含所有需要的lib。在启动之后,我有部分(大部分)库是从LD_LIBRARY_PATH加载的,但也有一些是从标准的/usr/lib加载的(例如/usr/lib/libQtNetwork.so.4,/usr/lib/libSM.so.6)。所有这些库都包含在LD_LIBRARY_PATH中列出的目录中。谁能解释一下为什么我会有这样的行为?我对Linux世界不是很熟悉,但是this article说我的方法应该行得通。
附注:如果我将/usr/libs重命名为其他名称,我会让我的应用程序使用我的libs位置中使用的所有lib运行
提前感谢!
发布于 2011-03-21 17:51:21
我已经找到了答案,答案是RPATH。所有的Qt库都是用RPATH=$QT_INSTALL_DIR构建的,所以如果你想在中创建“包”,就应该删除LinuxRPATH包。可以通过调用chrpath命令删除RPATH。感谢大家的帮助!
发布于 2011-03-20 23:06:44
好的,看起来你在使用Qt,但同样的原则也适用,并且不是Qt特定的。
首先要查看的是QTDIR环境变量,然后是QTDIR,最后是LD_LIBRARY_PATH.
通常你不需要“玩”LD_LIBRARY_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,如果安装了linux发行版,则路径中将包含qmake。如果您进行了自定义安装或编译,则需要设置路径。
祝好运。
https://stackoverflow.com/questions/5368384
复制相似问题