我的项目包括一个库以及如何使用它的示例项目。我将库与所有可执行示例一起放在“bin”文件夹中。我可以在编译它们的机器上运行示例项目,但是当我尝试在另一台机器上运行它时,我得到:
./ example:加载共享库时出错:libMyLib.so:不能 打开共享对象文件:没有这样的文件或目录
这没有任何意义,因为该库位于同一文件夹中。什么导致它忽略其他机器上的库?
答案 0 :(得分:1)
仅仅因为该库与可执行文件位于同一目录中并不意味着它会在那里寻找它。默认情况下,在linux上,可执行文件只能查看由ldconfig和LD_LIBRARY_PATH
环境变量设置的有限目录集。
一个非常有用的技巧是将程序与额外的链接器选项链接
-Wl,-rpath,'$ORIGIN'
这将导致可执行文件也查看可执行文件所在的目录中的共享对象。
您通常可以通过添加到Makefile来设置:
LDFLAGS := -Wl,-rpath,'$$ORIGIN'
注意双 - $
此处 - make会将此解释为make变量,扩展为$
答案 1 :(得分:0)
当前目录不一定是动态链接器查找动态库的位置。可执行文件少得多的目录。
您可能需要检查ldconfig
以查看其查找位置。