-->

LD_LIBRARY_PATH precendence与编译麻烦(LD_LIBRARY_PATH p

2019-09-20 05:21发布

我试图在Linux系统上安装一些软件(Python的rpy2包,rpy2.robjects特别是,如果它的事项)。 我需要的软件查找其共享库在我的本地空间,而不是像在/ usr / lib64的任何全局空间。 我没有这台机器上的管理员权限。 我的问题是,即使我将LD_LIBRARY_PATH设置为指向我的本地空间,软件还是到在/ usr / lib64目录/不管,它认为是过时的库。 这些库是缺少它需要一些对象,因此它失败。 有什么能接管LD_LIBRARY_PATH优先级,有没有办法改变/摆脱它? 谢谢。

顺便说一句,有人在这个网站也有类似的问题,一年或更长时间以前,但他的回答所涉及的环境变量RPATH,并与chrpath工具改变它。 这不是在所有的rpy2清楚,我是用RPATH,并chrpath似乎我的系统上不可用。

附录:我试着用LD_DEBUG运行=库。 得到了输出的很多看起来像系统正在寻找我的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 [“路径”]来改变这一点,但没有做的。 目前显然没有“的DLLPath”,我以为会有。

OK,这就是进步,我猜。 任何人有什么事吗? 谢谢。

Answer 1:

看看一个名为$ R_HOME文件/ etc / ldpaths(其中你的情况$ R_HOME似乎是/ usr /本地/ lib64下/ R)。 正是在这个文件中设定的命令LD_LIBRARY_PATH在r的启动。

我的是这样:

flodel@netbook-samsung-N150:~$ cat /usr/lib/R/etc/ldpaths 
: ${JAVA_HOME=/usr/lib/jvm/java-6-openjdk/jre}
: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/lib/i386/client:${JAVA_HOME}/lib/i386:/usr/lib/jni}
if test -n ""; then
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib:}
else
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib}
fi
if test -n "${R_JAVA_LD_LIBRARY_PATH}"; then
  R_LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${R_JAVA_LD_LIBRARY_PATH}"
fi
if test -z "${LD_LIBRARY_PATH}"; then
  LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}"
else
  LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}"
fi
export LD_LIBRARY_PATH

如果你没有写访问该文件,您仍然可以启动R之前,这样做:

export R_LD_LIBRARY_PATH=/your/custom/path

我在我的机器,它的作品由R启动后,运行以下上测试:

Sys.getenv("LD_LIBRARY_PATH")
#[1] "/your/custom/path:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/jni"


Answer 2:

如果有人还在读这些文字,我从事一些“人才工程”来解决这个问题,即得到了系统管理员重新安装R,以便它有我需要的一切。 当然是不错的人。 非常感谢大家谁给的建议。 想继续下去,其中的一些,但我得去忙这个项目。 多谢!



Answer 3:

RPATH编译时(当然,链接)是唯一有用的; 它会影响被烤成二进制库搜索路径。

尝试与运行LD_DEBUG=libs ,这将显示出库正在从哪些路径加载。 难道是想从你的加载LD_LIBRARY_PATH ,但失败了,还是摆在首位(也许不是寻找有rpy2都有自己的图书馆路径机制?),还是其他什么东西?



Answer 4:

尝试在LD_LIBRARY_PATH的左侧添加您的目录作为优先推移从左向右。

export LD_LIBRARY_PATH=~/your/custom/path:$LD_LIBRARY_PATH


文章来源: LD_LIBRARY_PATH precendence and trouble with compiling