Linux:为什么loader会找到我的共享库?

时间:2015-12-18 10:11:11

标签: c++ linux shared-libraries ubuntu-14.04

我已经使用CMake编译了一个共享库作为子项目,然后主应用程序链接到库。库和应用程序位于我家dir下的同一输出目录中。

因为我在Linux上,我现在不明白为什么加载程序会看到我的库。

当我用ldd检查libs时一切正常。但是,我的印象是我必须设置LD_LIBRARY_PATH,以便我的应用程序可以从同一目录加载共享库。但我还没有设置它,它仍然有效。为什么呢?

1 个答案:

答案 0 :(得分:3)

也许您的构建过程在可执行文件中设置RPATH以在同一目录中查找库。要对此进行测试,请尝试将可执行文件移动到其他目录,然后查看是否可以运行它(或ldd)。

您还可以通过以下任一方式检查可执行文件中的RPATH

readelf -d the-exe | grep RPATH
objdump -x the-exe | grep RPATH

有关详情,请参阅此处:https://unix.stackexchange.com/questions/22926/where-do-executables-look-for-shared-objects-at-runtime