公共服务器个人目录安装R4.1.1无需修改.cshrc的依赖问题求解
公共服务器无root权限编译安装R 4.1.1的解决办法
报错本质是链接阶段ld无法定位你个人目录下的动态库,无需修改全局shell配置,两个可行方案如下:
方案1:编译时添加rpath参数(永久生效,推荐)
rpath会将依赖库路径直接写入编译生成的R二进制文件和libR.so中,编译和后续运行R都不需要额外设置环境变量。
修改后的configure命令参考:
./configure --prefix=$HOME/Programme/R-4.1.1 --enable-R-shlib --with-readline=no \ LDFLAGS="-L/$HOME/Programme/zlib-1.2.11/lib -Wl,-rpath,$HOME/Programme/zlib-1.2.11/lib \ -L/$HOME/Programme/bzip2-1.0.6/lib -Wl,-rpath,$HOME/Programme/bzip2-1.0.6/lib \ -L/$HOME/Programme/xz-5.2.4/lib -Wl,-rpath,$HOME/Programme/xz-5.2.4/lib \ -L/$HOME/Programme/pcre-8.40/lib -Wl,-rpath,$HOME/Programme/pcre-8.40/lib \ -L/$HOME/Programme/curl-7.52.1/lib -Wl,-rpath,$HOME/Programme/curl-7.52.1/lib" \ CPPFLAGS="-I/$HOME/Programme/zlib-1.2.11/include -I/$HOME/Programme/bzip2-1.0.6/include \ -I/$HOME/Programme/xz-5.2.4/include -I/$HOME/Programme/pcre-8.40/include \ -I/$HOME/Programme/curl-7.52.1/include" \ --with-x=no --with-pcre1
其中-Wl,-rpath,路径的作用是告诉gcc将对应路径传递给链接器,写入可执行文件的动态链接搜索列表。
方案2:临时设置当前会话的环境变量
仅在执行configure和make的当前shell会话临时设置LD_LIBRARY_PATH,仅对当前会话生效,不会修改全局配置:
# 临时添加个人编译的库路径,当前shell关闭后配置自动失效 export LD_LIBRARY_PATH=$HOME/Programme/zlib-1.2.11/lib:$HOME/Programme/bzip2-1.0.6/lib:$HOME/Programme/xz-5.2.4/lib:$HOME/Programme/pcre-8.40/lib:$HOME/Programme/curl-7.52.1/lib:$LD_LIBRARY_PATH # 后续正常执行你原来的configure和make命令即可 ./configure [你原来的configure参数] make -j4 && make install
额外注意事项
- 编译前先确认依赖库的动态文件存在:检查
$HOME/Programme/pcre-8.40/lib下是否有libpcre.so.1,$HOME/Programme/xz-5.2.4/lib下是否有liblzma.so.5,如果缺失说明对应依赖编译时未开启动态库编译,重新编译对应依赖时添加--enable-shared参数即可。 - 若后续运行R时仍报库找不到,可每次运行前临时设置LD_LIBRARY_PATH,或直接使用方案1重新编译R,就无需每次设置。
内容的提问来源于stack exchange,提问作者Paolo Lorenzini
相关产品推荐
相关产品推荐

