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

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

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

最佳答案

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

关于c++ - Linux : Why loader finds my shared library?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34353100/

10-11 19:21