安装非CRAN包BoostMLR时出现非零退出状态问题求助
BoostMLR包安装加载失败的问题排查与解决建议
问题描述
安装BoostMLR包时出现加载失败,多次尝试安装并检查过工作目录和安装路径后仍未解决,请求错误解读和解决建议。
安装代码
install.packages("/programs/apps/BoostMLRpackage/BoostMLR_2.0.1.tar.gz",repos = NULL, dependencies = TRUE)
控制台输出
Installing package into ‘/home/kramerb2/R/x86_64-pc-linux-gnu-library/4.2’ (as ‘lib’ is unspecified) * installing *source* package ‘BoostMLR’ ... ** using staged installation ** libs g++ -std=gnu++14 -I"/opt/R-4.2.2/lib64/R/include" -DNDEBUG -I'/opt/R-4.2.2/lib64/R/library/Rcpp/include' -I'/opt/R-4.2.2/lib64/R/library/RcppArmadillo/include' -I/usr/local/include -fpic -g -O2 -c BoostMLR.cpp -o BoostMLR.o g++ -std=gnu++14 -I"/opt/R-4.2.2/lib64/R/include" -DNDEBUG -I'/opt/R-4.2.2/lib64/R/library/Rcpp/include' -I'/opt/R-4.2.2/lib64/R/library/RcppArmadillo/include' -I/usr/local/include -fpic -g -O2 -c RcppExports.cpp -o RcppExports.o g++ -std=gnu++14 -shared -L/opt/R-4.2.2/lib64/R/lib -L/usr/local/lib64 -o BoostMLR.so BoostMLR.o RcppExports.o -L/opt/R-4.2.2/lib64/R/lib -lR installing to /home/kramerb2/R/x86_64-pc-linux-gnu-library/4.2/00LOCK-BoostMLR/00new/BoostMLR/libs ** R ** data ** inst ** byte-compile and prepare package for lazy loading ** help *** installing help indices ** building package indices ** testing if installed package can be loaded from temporary location Error: package or namespace load failed for ‘BoostMLR’ in dyn.load(file, DLLpath = DLLpath, ...): unable to load shared object '/home/kramerb2/R/x86_64-pc-linux-gnu-library/4.2/00LOCK-BoostMLR/00new/BoostMLR/libs/BoostMLR.so': /home/kramerb2/R/x86_64-pc-linux-gnu-library/4.2/00LOCK-BoostMLR/00new/BoostMLR/libs/BoostMLR.so: undefined symbol: dpotrf_ Error: loading failed Execution halted ERROR: loading failed * removing ‘/home/kramerb2/R/x86_64-pc-linux-gnu-library/4.2/BoostMLR’ * restoring previous ‘/home/kramerb2/R/x86_64-pc-linux-gnu-library/4.2/BoostMLR’ Warning in install.packages : installation of package ‘/programs/apps/BoostMLRpackage/BoostMLR_2.0.1.tar.gz’ had non-zero exit status
错误解读
undefined symbol: dpotrf_ 表明编译生成的BoostMLR.so共享库找不到dpotrf_符号。dpotrf_是LAPACK库中的Cholesky分解函数,BoostMLR依赖的RcppArmadillo需要链接LAPACK/BLAS库,但当前编译链接阶段仅添加了-lR参数,未显式链接LAPACK/BLAS,导致符号缺失。
解决建议
- 修改包编译配置:若能修改BoostMLR源码,在包目录的
src文件夹下创建或编辑Makevars文件,添加以下内容:
此配置会让R自动链接系统的LAPACK和BLAS库。PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) - 安装时指定链接库:无法修改源码的话,安装时通过
configure.args参数手动指定链接库:
部分系统可能使用install.packages("/programs/apps/BoostMLRpackage/BoostMLR_2.0.1.tar.gz", repos = NULL, dependencies = TRUE, configure.args = "--with-lapack-lib=-llapack --with-blas-lib=-lblas")openblas替代blas,需根据实际情况调整参数。 - 安装系统依赖库:确保系统已安装LAPACK和BLAS开发库:
- Debian/Ubuntu系统:
sudo apt-get install liblapack-dev libblas-dev - RHEL/CentOS系统:
sudo yum install lapack-devel blas-devel
- Debian/Ubuntu系统:
内容的提问来源于stack exchange,提问作者bptkramer
相关产品推荐
相关产品推荐

