繁体   English   中英

我的库未在其他系统上加载,但在其上编译的系统上运行良好

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM