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

时间:2010-10-27 13:51:10

标签: linux macos shared-libraries sandbox

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

在OSX上,库本身的位置被记录到库中,因此,如果应用程序链接到它,则可执行文件知道在运行时查找库的位置。这与我的沙箱一样有效,因为可执行文件看起来不是系统范围的安装路径。

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

这似乎不适合我,因为我的库位于用户主目录中。看起来ldconfig不喜欢它,这实际上是有意义的。

我该如何解决这个问题?我不想将这些库移出我的沙箱。

2 个答案:

答案 0 :(得分:2)

在Linux上,运行您的程序,并将环境变量LD_LIBRARY_PATH设置为沙箱目录。

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

答案 1 :(得分:1)

在Linux上,您应该将LD_RUN_PATH设置为沙箱目录。这比设置LD_LIBRARY_PATH更好,因为您告诉链接器库在链接时,而不是在运行时告诉共享库加载器。

请参阅:http://xahlee.org/UnixResource_dir/_/ldpath.html