Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何链接本地目录中的共享库,OSX与Linux_Linux_Macos_Shared Libraries_Sandbox - Fatal编程技术网

如何链接本地目录中的共享库,OSX与Linux

如何链接本地目录中的共享库,OSX与Linux,linux,macos,shared-libraries,sandbox,Linux,Macos,Shared Libraries,Sandbox,我在沙盒目录中安装了一些共享/动态库。我正在构建一些与库链接的应用程序。在这方面,我遇到了OSX和Linux之间的差异,我不确定(最佳)解决方案是什么 在OSX上,库本身的位置被记录到库中,这样,如果应用程序链接到它,可执行文件就知道在运行时从何处查找库。这与我的沙盒的预期效果一样,因为可执行文件在那里查看,而不是系统范围的安装路径 在Linux上,我无法让它工作。显然,库位置不存在于库本身中。据我所知,您必须将包含库的文件夹添加到/etc/ld.so.conf,并通过运行ldconfig重新生

我在沙盒目录中安装了一些共享/动态库。我正在构建一些与库链接的应用程序。在这方面,我遇到了OSX和Linux之间的差异,我不确定(最佳)解决方案是什么

在OSX上,库本身的位置被记录到库中,这样,如果应用程序链接到它,可执行文件就知道在运行时从何处查找库。这与我的沙盒的预期效果一样,因为可执行文件在那里查看,而不是系统范围的安装路径

在Linux上,我无法让它工作。显然,库位置不存在于库本身中。据我所知,您必须将包含库的文件夹添加到/etc/ld.so.conf,并通过运行ldconfig重新生成ld缓存

这对我来说似乎不起作用,因为我的库位于用户主目录中。看起来ldconfig不喜欢这样,这实际上是有道理的


我怎样才能解决这个问题?我不想将库移出沙盒。

在Linux上,运行程序时将环境变量
LD\u LIBRARY\u PATH
设置为您的沙盒目录


(我记得曾使用标志
-R
在二进制文件中包含库路径,但它要么已从
gcc
中删除,要么仅在BSD系统上可用。)

在Linux上,您应该将
LD\u RUN\u PATH
设置为沙盒目录。这比设置
LD\u LIBRARY\u PATH
要好,因为您告诉链接器库在链接时间的位置,而不是在运行时间告诉共享库加载器


请参阅:

我不知何故认为ldconfig使用了LD\u LIBRARY\u路径。我不知道你可以动态地改变它。它就像一个符咒。谢谢
-Wl,-rpath,/path/to/sandbox
这种方式似乎是在二进制中设置rpath,这对于沙盒应用程序可能很好,但通常不可能移动应用程序。这里讨论的是沙盒应用程序。“移动应用程序”是什么意思?二进制分布?在这种情况下,LD_RUN_PATH没有帮助。