Linux 为什么要通过将/usr/lib添加到ld.so.conf来修复运行时未定义的符号?

Linux 为什么要通过将/usr/lib添加到ld.so.conf来修复运行时未定义的符号?,linux,runtime,shared-libraries,undefined-symbol,Linux,Runtime,Shared Libraries,Undefined Symbol,我在linux中遇到过一个例子,gcc和ld可以干净地构建东西,但在运行时,我在libxerces-c.so.28中得到了一个未定义的符号,这是我自己的一个共享库在运行程序时报告的 第一个假设是缓存被破坏,xerces最近安装,或者类似的东西,所以我运行了ldconfig。没有修好。但是将/usr/lib添加到ld.so.conf,然后运行ldconfig确实解决了这个问题 我的理解是/lib、/usr/lib,也许运行时动态链接器总是搜索另外一两个点 ? 唯一与众不同的是,这是一个使用jni访

我在linux中遇到过一个例子,gcc和ld可以干净地构建东西,但在运行时,我在libxerces-c.so.28中得到了一个未定义的符号,这是我自己的一个共享库在运行程序时报告的

第一个假设是缓存被破坏,xerces最近安装,或者类似的东西,所以我运行了ldconfig。没有修好。但是将/usr/lib添加到ld.so.conf,然后运行ldconfig确实解决了这个问题

我的理解是/lib、/usr/lib,也许运行时动态链接器总是搜索另外一两个点

?


唯一与众不同的是,这是一个使用jni访问应用程序共享库的java程序。同样,如果它是合理的,我应该在这个应用程序的过去N年中的任何时候都看到这个错误。

在这个特定的例子中,库位于/usr/lib中,但也位于另一个项目中,链接器首先找到了这个项目。它一定是一个坏的/不完整的,因为它显然缺少一个符号

我通过运行我的程序来解决这个问题

LD_DEBUG=libs ./a.out
这让我看到链接器在不同的搜索路径中挖掘,我看到它抓住了错误的路径


哦-并显式地将/usr/lib添加到ld配置中?这只是将/usr/lib放在搜索路径中的时间比通常要早,运气如何?使ld在坏库之前找到好库。

在这种情况下,库位于/usr/lib中,但也位于另一个项目中,链接器首先找到了该库。它一定是一个坏的/不完整的,因为它显然缺少一个符号

我通过运行我的程序来解决这个问题

LD_DEBUG=libs ./a.out
这让我看到链接器在不同的搜索路径中挖掘,我看到它抓住了错误的路径

哦-并显式地将/usr/lib添加到ld配置中?这只是将/usr/lib放在搜索路径中的时间比通常要早,运气如何?让我在坏图书馆之前找到好图书馆