首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LD_LIBRARY_PATH优先级

LD_LIBRARY_PATH优先级
EN

Stack Overflow用户
提问于 2011-03-20 20:11:03
回答 2查看 6.1K关注 0票数 5

我偶然发现了一些奇怪的行为:在启动应用程序之前,我将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运行

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-21 17:51:21

我已经找到了答案,答案是RPATH。所有的Qt库都是用RPATH=$QT_INSTALL_DIR构建的,所以如果你想在中创建“包”,就应该删除LinuxRPATH包。可以通过调用chrpath命令删除RPATH。感谢大家的帮助!

票数 3
EN

Stack Overflow用户

发布于 2011-03-20 23:06:44

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

首先要查看的是QTDIR环境变量,然后是QTDIR,最后是LD_LIBRARY_PATH.

通常你不需要“玩”LD_LIBRARY_PATH。如果你的路径是正确的,那么你应该是好的。

顺便提一下(您可能知道):要查看所使用的库,可以使用ldd命令。例如:

代码语言:javascript
运行
复制
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。如果您进行了自定义安装或编译,则需要设置路径。

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5368384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档