2010-10-27 87 views
2

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

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

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

这似乎并没有为我做伎俩,因为我的图书馆位于用户主目录内。它看起来像ldconfig不喜欢,这实际上是有道理的。

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

回答

2

在Linux上,使用设置为沙盒目录的环境变量LD_LIBRARY_PATH运行程序。

(我记得使用的标志-R包括二进制库路径,但它要么已从gcc删除或它仅适用于BSD系统。)

+0

我莫名其妙地被使用以为LDCONFIG LD_LIBRARY_PATH。我不知道你可以动态改变它。它像一个魅力。谢谢! – 2010-10-27 14:14:46

+0

我投了这个答案,我的错误:-p – 2011-04-14 10:14:02

+0

'-Wl,-rpath,/ path/to/sandbox' – Jed 2014-02-10 06:29:40

1

在Linux上,你应该设置LD_RUN_PATH到您的沙箱目录。这比设置LD_LIBRARY_PATH好,因为您要告诉链接器库的位置在链接时间,而不是告诉共享库加载程序在运行时间

参见:http://xahlee.org/UnixResource_dir/_/ldpath.html

+0

这种方式似乎将RPATH设置为二进制文件,对于沙盒应用程序来说可能没问题,但通常会使它不可能移动应用程序。 – 2011-04-14 11:32:20

+0

沙盒应用程序在这里是有问题的。 “移动应用程序”是什么意思?二进制分布?在这种情况下,LD_RUN_PATH将不起作用。 – 2011-04-14 11:43:57