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

Linux 我的库不在其他系统上加载,但在编译它的系统上运行良好,linux,Linux,我的项目包括一个库和如何使用它的示例项目。我将库与所有可执行示例一起放在“bin”文件夹中。我可以在编译示例项目的机器上运行它们,但当我尝试在另一台机器上运行它们时,我得到: /示例:加载共享库时出错:libMyLib.so:无法 打开共享对象文件:没有这样的文件或目录 这没有意义,因为库位于同一文件夹中。是什么导致它忽略其他机器上的库?当前目录不一定是动态链接器查找动态库的地方。可执行文件要少得多的目录 您可能需要检查ldconfig以查看它在哪里查找它们。仅仅因为库与可执行文件位于同一目录中

我的项目包括一个库和如何使用它的示例项目。我将库与所有可执行示例一起放在“bin”文件夹中。我可以在编译示例项目的机器上运行它们,但当我尝试在另一台机器上运行它们时,我得到:

/示例:加载共享库时出错:libMyLib.so:无法 打开共享对象文件:没有这样的文件或目录


这没有意义,因为库位于同一文件夹中。是什么导致它忽略其他机器上的库?

当前目录不一定是动态链接器查找动态库的地方。可执行文件要少得多的目录


您可能需要检查
ldconfig
以查看它在哪里查找它们。

仅仅因为库与可执行文件位于同一目录中并不意味着它将在那里查找它。默认情况下,linux上的可执行文件将只在有限的一组目录中查找,这些目录由ldconfig和
LD\u LIBRARY\u PATH
环境变量设置

一个非常有用的技巧是用额外的链接器选项链接你的程序

-Wl,-rpath,'$ORIGIN'
这将导致可执行文件也在可执行文件所在的目录中查找共享对象

您通常可以通过向Makefile中添加以下内容来设置:

LDFLAGS := -Wl,-rpath,'$$ORIGIN'
注意这里的双精度-
$
——make将把它解释为make变量,它只扩展到
$