![](/img/trans.png)
[英]Why does my file/dir manipulation works fine on Windows but not on Linux?
[英]My library does not load on other systems but works fine on the system it was compiled on
我的项目包括一个库和有关如何使用它的示例项目。 我将库与所有可执行示例一起放在“ bin”文件夹中。 我可以在示例项目的编译机器上运行示例项目,但是当我尝试在另一台计算机上运行它们时,我得到:
./example:加载共享库时出错:libMyLib.so:无法打开共享库文件:没有这样的文件或目录
因为库位于同一文件夹中,所以这没有任何意义。 是什么导致它忽略其他计算机上的库?
仅仅因为该库与可执行文件位于同一目录中,并不意味着它将在该目录中寻找它。 在Linux上,默认情况下,可执行文件将仅查看由ldconfig和LD_LIBRARY_PATH
环境变量设置的一组有限目录。
一个非常有用的技巧是使用额外的链接器选项链接程序
-Wl,-rpath,'$ORIGIN'
这将导致可执行文件同时在可执行文件所在的目录中查找共享对象。
通常,可以通过添加到Makefile中来进行设置:
LDFLAGS := -Wl,-rpath,'$$ORIGIN'
注意这里的双$
-make会将其解释为make变量,扩展为$
当前目录不一定是动态链接程序将在其中查找动态库的地方。 可执行文件所在的目录要少得多。
您可能要检查ldconfig
以查看在哪里寻找它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.