在R中安装minpack.lm包编译失败求助
安装R包minpack.lm时编译失败的问题解决
问题背景
在两台不同的Ubuntu电脑上执行install.packages("minpack.lm")安装minpack.lm包均失败,其中一台使用Anaconda集成的R(版本信息如下),另一台使用系统自带R:
R version 3.5.1 (2018-07-02) -- "Feather Spray"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
编译错误信息
x86_64-conda_cos6-linux-gnu-cc -I"/home/eddie/bin/anaconda3/lib/R/include" -DNDEBUG -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -I/home/eddie/bin/anaconda3/include -Wl,-rpath-link,/home/eddie/bin/anaconda3/lib -fpic -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -I/home/eddie/bin/anaconda3/include -fdebug-prefix-map==/usr/local/src/conda/- -fdebug-prefix-map==/usr/local/src/conda-prefix -c nls_lm.c -o nls_lm.o x86_64-conda_cos6-linux-gnu-cc -I"/home/eddie/bin/anaconda3/lib/R/include" -DNDEBUG -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -I/home/eddie/bin/anaconda3/include -Wl,-rpath-link,/home/eddie/bin/anaconda3/lib -fpic -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -I/home/eddie/bin/anaconda3/include -fdebug-prefix-map==/usr/local/src/conda/- -fdebug-prefix-map==/usr/local/src/conda-prefix -c prod.c -o prod.o prod.c: In function 'matprod': prod.c:55:41: error: expected ')' before 'FCONE' x, &nrx, y, &nry, &zero, z, &nrx FCONE FCONE); ^~~~~ prod.c: In function 'crossprod': prod.c:67:37: error: expected ')' before 'FCONE' x, &nrx, y, &nry, &zero, z, &ncx FCONE FCONE); ^~~~~ make: *** [/home/eddie/bin/anaconda3/lib/R/etc/Makeconf:160: prod.o] Error 1 ERROR: compilation failed for package ‘minpack.lm’ * removing ‘/home/eddie/bin/anaconda3/lib/R/library/minpack.lm’ * restoring previous ‘/home/eddie/bin/anaconda3/lib/R/library/minpack.lm’ The downloaded source packages are in ‘/tmp/RtmpQKYnHk/downloaded_packages’ Updating HTML index of packages in '.Library' Making 'packages.html' ... done Warning message: In install.packages("minpack.lm") : installation of package ‘minpack.lm’ had non-zero exit status
问题原因
- R版本过旧:使用的R 3.5.1是2018年发布的版本,minpack.lm的新版本已不再兼容该老旧版本,FCONE宏的语法在新R编译环境中有所调整,旧版R的头文件无法正确解析这种语法。
- 编译依赖缺失:Ubuntu系统缺少编译R包必需的基础工具和线性代数库,比如
build-essential、liblapack-dev等,这些是编译minpack.lm这类依赖底层计算的包的必要条件。
解决办法
方法一:升级R版本(推荐)
- Anaconda环境:在终端执行以下命令升级R到兼容版本:
或指定安装稳定新版本:conda update r-baseconda install r-base=4.2.0 - 系统自带R:通过CRAN源升级:
- 添加CRAN源:
echo "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" | sudo tee /etc/apt/sources.list.d/r-project.list - 添加公钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 - 更新并升级R:
sudo apt update && sudo apt upgrade r-base
install.packages("minpack.lm")即可。 - 添加CRAN源:
方法二:安装编译依赖并安装旧版包(无法升级R时适用)
- 先安装编译必需的工具和库:
sudo apt install build-essential liblapack-dev libblas-dev libssl-dev libcurl4-openssl-dev - 在R中安装兼容旧版本的minpack.lm:
install.packages("devtools") library(devtools) # 安装兼容R 3.5.x的1.2-1版本 install_version("minpack.lm", version = "1.2-1", repos = "http://cran.us.r-project.org")
方法三:Anaconda环境直接安装预编译包
通过conda安装预编译好的包,跳过编译步骤:
conda install -c conda-forge r-minpack.lm
内容的提问来源于stack exchange,提问作者Eddie Ackad
相关产品推荐
相关产品推荐

