Linux:为什么加载程序找到我的共享库
Linux: Why loader finds my shared library?
我用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
相关文章:
- 为什么我的共享库中存在展开符号
- 链接二进制库或共享库时,为什么必须传入我依赖的共享库?
- 如果我在 Linux 上更改C++动态共享库,而我的可执行程序在其上使用,会发生什么
- 为什么我的程序寻找共享资源.dll而不是Commons.lib
- 如何将我的 cli 信息(变量等)共享到子进程,这是一个 bash shell 脚本
- CUDA我的共享内存代码不起作用,我缺少什么
- 如何与他人共享我的 SFML 游戏而不会出错?
- 我的共享内存对象保存在哪里
- 使用我的共享指针获取内存泄漏
- 如何共享我的 C/C++ 项目并隐藏一些源代码
- 为什么我的按钮类项目共享相同的lambda功能
- lua加载我的c++共享库,但不加载它的依赖共享库
- 我的交叉编译器找不到共享库
- 我可以在libleveldb.a中找到符号,但是当我创建共享库时,找不到相同的符号。
- Cmake不会将共享库的链接依赖关系传播到我的可执行文件
- CUDA,可以使用共享内存可以提高我的性能
- CMake没有创建可以访问我的共享库的可执行文件
- 即使我修改了LD_LIBRARY_PATH,也找不到我的共享库
- Linux:为什么加载程序找到我的共享库
- sprof如何定位我的共享库