安装R语言DirichletMultinomial包时libgsl.so.27加载失败求助
安装R包DirichletMultinomial时无法识别/usr/local/lib下的libgsl.so.27
在远程服务器上安装R语言的DirichletMultinomial包时,遇到R无法识别/usr/local/lib目录下存在的libgsl.so.27文件的问题,本地环境安装该包正常,仅远程服务器出现此问题。
已确认/usr/local/lib下存在目标文件
执行ls -lh /usr/local/lib显示相关文件存在:
$ ls -lh /usr/local/lib total 46M -rw-r--r-- 1 root root 27M Apr 29 11:30 libgsl.a -rw-r--r-- 1 root root 2.2M Apr 29 11:30 libgslcblas.a -rwxr-xr-x 1 root root 948 Apr 29 11:30 libgslcblas.la* lrwxrwxrwx 1 root root 20 Apr 29 11:30 libgslcblas.so -> libgslcblas.so.0.0.0* lrwxrwxrwx 1 root root 20 Apr 29 11:30 libgslcblas.so.0 -> libgslcblas.so.0.0.0* -rwxr-xr-x 1 root root 1.3M Apr 29 11:30 libgslcblas.so.0.0.0* -rwxr-xr-x 1 root root 917 Apr 29 11:30 libgsl.la* lrwxrwxrwx 1 root root 16 Apr 29 11:30 libgsl.so -> libgsl.so.27.0.0* lrwxrwxrwx 1 root root 16 Apr 29 11:30 libgsl.so.27 -> libgsl.so.27.0.0* -rwxr-xr-x 1 root root 16M Apr 29 11:30 libgsl.so.27.0.0* drwxr-xr-x 2 root root 20 Apr 29 11:30 pkgconfig/
安装包时的错误信息
尝试安装包时出现如下错误:
gcc -shared -L/HL8/HApp/R/4.3.3/lib64/R/lib -L/usr/local/lib64 -o DirichletMultinomial.so R_init_DirichletMultinomial.o dirichlet_fit.o dirichlet_fit_main.o -L/usr/local/lib -lgsl -lgslcblas -lm -L/HL8/HApp/R/4.3.3/lib64/R/lib -lR installing to /home/username/R/x86_64-pc-linux-gnu-library/4.3/00LOCK-DirichletMultinomial/00new/DirichletMultinomial/libs ** R ** data ** inst ** byte-compile and prepare package for lazy loading ** help *** installing help indices ** building package indices ** installing vignettes ** testing if installed package can be loaded from temporary location Error: package or namespace load failed for ‘DirichletMultinomial’ in dyn.load(file, DLLpath = DLLpath, ...): unable to load shared object '/home/nsk980613/R/x86_64-pc-linux-gnu-library/4.3/00LOCK-DirichletMultinomial/00new/DirichletMultinomial/libs/DirichletMultinomial.so': libgsl.so.27: cannot open shared object file: No such file or directory Error: loading failed
已尝试的无效方法
- 先后通过yum包管理器和手动编译tarball安装GSL,已卸载yum安装的版本,问题仍未解决,不敢卸载手动安装版本怕破坏环境
- 设置
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib,该方法无效
解决方案
1. 更新动态链接库缓存
执行以下命令让系统识别/usr/local/lib下的库文件:
sudo ldconfig
更新完成后重新尝试安装DirichletMultinomial包。
2. 永久配置LD_LIBRARY_PATH
临时设置的环境变量可能未在R会话中生效,可通过以下步骤永久配置:
- 编辑用户的
~/.bashrc或~/.profile文件,添加:export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" - 执行
source ~/.bashrc使配置立即生效,随后重启R进行安装。
3. 安装时指定GSL路径
强制R在编译包时使用指定路径的GSL库,执行以下R命令:
install.packages("DirichletMultinomial", configure.args = c("--with-gsl-include=/usr/local/include", "--with-gsl-lib=/usr/local/lib"))
4. 检查库与R的架构匹配
确认GSL库和R的系统架构一致(均为x86_64):
file /usr/local/lib/libgsl.so.27 file $(which R)
若架构不匹配,需重新编译对应架构的GSL库。
内容的提问来源于stack exchange,提问作者user24790338
相关产品推荐
相关产品推荐

