我在沙箱目录中安装了一些共享/动态库。我正在构建一些链接库的应用程序。我在这方面遇到了OSX和Linux之间的差异,我不确定(最佳)解决方案是什么。
在OSX上,库本身的位置被记录到库中,因此,如果应用程序链接到它,则可执行文件知道在运行时查找库的位置。这与我的沙箱一样有效,因为可执行文件看起来不是系统范围的安装路径。
在Linux上,我无法让它工作。显然图书馆位置不在图书馆本身。据我所知,你必须将包含库的文件夹添加到/etc/ld.so.conf并通过运行ldconfig重新生成ld缓存。
这似乎不适合我,因为我的库位于用户主目录中。看起来ldconfig不喜欢它,这实际上是有意义的。
我该如何解决这个问题?我不想将这些库移出我的沙箱。
答案 0 :(得分:2)
在Linux上,运行您的程序,并将环境变量LD_LIBRARY_PATH
设置为沙箱目录。
(我记得曾使用标记-R
在二进制文件中包含库路径,但它已从gcc
中删除,或者仅在BSD系统上可用。)
答案 1 :(得分:1)
在Linux上,您应该将LD_RUN_PATH
设置为沙箱目录。这比设置LD_LIBRARY_PATH
更好,因为您告诉链接器库在链接时,而不是在运行时告诉共享库加载器。