Linux:为什么加载程序找到我的共享库

Linux: Why loader finds my shared library?

本文关键字:我的 共享 程序 为什么 加载 Linux      更新时间:2023-10-16

我用CMake编译了一个共享库作为子项目,然后主应用程序链接到该库。库和应用程序在我的主目录下的同一个输出目录中

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

当我用ldd检查libs时,一切都很好。但是,我觉得我必须设置LD_LIBRARY_PATH,这样我的应用程序才能从同一目录加载共享的lib。但我还没有设置它,它仍然有效。为什么?

也许您的构建过程正在可执行文件中设置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