我正在尝试在 Linux 机器上安装一些软件(python 的 rpy2 包,特别是 rpy2.robjects,如果重要的话)。我需要该软件在我的本地空间中查找它的共享库,而不是在像 /usr/lib64 这样的全局空间中。我在这台机器上没有管理员权限。我的问题是,即使我将 LD_LIBRARY_PATH 设置为指向我的本地空间,该软件仍然会转到 /usr/lib64/whatever,它会在其中找到过期的库。这些库缺少一些它需要的对象,所以它失败了。什么可能优先于 LD_LIBRARY_PATH,有没有办法改变/摆脱它?谢谢。
顺便说一句,这个网站上的某个人在一年或更长时间前也有过类似的问题,但他的回答涉及环境变量 RPATH,并使用 chrpath 实用程序对其进行了更改。我完全不清楚 rpy2 正在使用 RPATH,而 chrpath 在我的系统上似乎不可用。
附录:我尝试使用 LD_DEBUG=libs 运行。得到了很多看起来系统正在寻找我的 LD_LIBRARY_PATH 中的库并找到它们的输出。这里是麻烦似乎开始的地方:
/usr/local/lib64/R/library/methods/libs/methods.so: error: symbol lookup error:
undefined symbol: Rf_allocS4Object (fatal)
Error in dyn.load(file, DLLpath = DLLpath, ...) :
unable to load shared object '/usr/local/lib64/R/library/methods/libs/methods.so':
/usr/local/lib64/R/library/methods/libs/methods.so: undefined symbol: Rf_allocS4Object
所以我的猜测是问题在于 DLLpath 中的任何内容都覆盖了 LD_LIBRARY_PATH。我试图通过将我的目录添加到 os.environ['PATH'] 来改变这一点,但没有这样做。显然没有“DLLPATH”,就像我想的那样。
好吧,我猜这就是进步。有人还有什么吗?谢谢。