我的项目包括一个库和如何使用它的示例项目。我把库和所有可执行的例子放在“bin”文件夹中。我可以在编译示例项目的计算机上运行它们,但是当我尝试在另一台计算机上运行它们时,我会得到:
./example:加载共享库时出错:libMyLib.so:无法
打开共享对象文件:没有这样的文件或目录
这没有意义,因为库在同一个文件夹中。是什么导致它忽略了其他机器上的库?
最佳答案
仅仅因为库与可执行文件在同一个目录中并不意味着它会在那里查找它。在linux上,默认情况下,可执行文件将只在由ldconfig和LD_LIBRARY_PATH
环境变量设置的有限目录集中查找。
一个非常有用的技巧是将程序与额外的链接器选项链接起来
-Wl,-rpath,'$ORIGIN'
这将导致可执行文件也在可执行文件所在的目录中查找共享对象。
通常可以通过向Makefile添加以下内容来设置:
LDFLAGS := -Wl,-rpath,'$$ORIGIN'
注意这里的double-
$
make将其解释为make变量,它将扩展到$
关于linux - 我的库未在其他系统上加载,但在其上编译的系统上运行良好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24480578/