R更新后无法安装包:新位置重装及编译问题求助
解决R更新后包安装失败与编译器版本不匹配问题
问题背景
我是R新手,有少量使用经验。更新R和RStudio后所有包无法安装,以安装dplyr为例出现编译失败错误:
> install.packages("dplyr") There is a binary version available but the source version is later: binary source needs_compilation dplyr 1.0.10 1.1.0 TRUE Do you want to install from sources the package which needs compilation? (Yes/no/cancel) Yes installing the source package ‘dplyr’ trying URL 'https://cran.rstudio.com/src/contrib/dplyr_1.1.0.tar.gz' Content type 'application/x-gzip' length 1068347 bytes (1.0 MB) ================================================== downloaded 1.0 MB * installing *source* package ‘dplyr’ ... ** package ‘dplyr’ successfully unpacked and MD5 sums checked ** using staged installation ** libs /usr/local/Cellar/gcc/9.2.0/bin/g++-7 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/usr/local/include -fPIC -Wall -g -O2 -c chop.cpp -o chop.o /bin/sh: /usr/local/Cellar/gcc/9.2.0/bin/g++-7: No such file or directory make: *** [chop.o] Error 127 ERROR: compilation failed for package ‘dplyr’ * removing ‘/Library/Frameworks/R.framework/Versions/4.2/Resources/library/dplyr’ * restoring previous ‘/Library/Frameworks/R.framework/Versions/4.2/Resources/library/dplyr’ Warning in install.packages : installation of package ‘dplyr’ had non-zero exit status The downloaded source packages are in ‘/private/var/folders/k7/pbrcjpr517x06fhvnkvbq0nc0000gp/T/RtmpAODLeZ/downloaded_packages’ >
排查结果
经检查,R试图调用旧版本g++-7,但终端显示当前gcc版本为12.2.0,对应g++-12:
(base) Liams-MacBook-Pro:~ lessig7$ brew list gcc /usr/local/Cellar/gcc/12.2.0/bin/c++-12 /usr/local/Cellar/gcc/12.2.0/bin/cpp-12 /usr/local/Cellar/gcc/12.2.0/bin/g++-12 /usr/local/Cellar/gcc/12.2.0/bin/gcc-12 /usr/local/Cellar/gcc/12.2.0/bin/gcc-ar-12 /usr/local/Cellar/gcc/12.2.0/bin/gcc-nm-12 /usr/local/Cellar/gcc/12.2.0/bin/gcc-ranlib-12 /usr/local/Cellar/gcc/12.2.0/bin/gcov-12 /usr/local/Cellar/gcc/12.2.0/bin/gcov-dump-12 /usr/local/Cellar/gcc/12.2.0/bin/gcov-tool-12 /usr/local/Cellar/gcc/12.2.0/bin/gfortran /usr/local/Cellar/gcc/12.2.0/bin/gfortran-12 /usr/local/Cellar/gcc/12.2.0/bin/lto-dump-12 /usr/local/Cellar/gcc/12.2.0/bin/x86_64-apple-darwin21-c++-12 /usr/local/Cellar/gcc/12.2.0/bin/x86_64-apple-darwin21-g++-12 /usr/local/Cellar/gcc/12.2.0/bin/x86_64-apple-darwin21-gcc-12 /usr/local/Cellar/gcc/12.2.0/bin/x86_64-apple-darwin21-gcc-ar-12 /usr/local/Cellar/gcc/12.2.0/bin/x86_64-apple-darwin21-gcc-nm-12 /usr/local/Cellar/gcc/12.2.0/bin/x86_64-apple-darwin21-gcc-ranlib-12 /usr/local/Cellar/gcc/12.2.0/bin/x86_64-apple-darwin21-gfortran-12 /usr/local/Cellar/gcc/12.2.0/include/c++/ (806 files) /usr/local/Cellar/gcc/12.2.0/lib/gcc/ (719 files)
错误尝试
我曾错误指定编译器路径作为包安装目录,导致权限错误:
install.packages("dplyr", lib="/usr/local/Cellar/gcc/12.2.0/bin/c++-12/Library/Frameworks/R.framework/Resources/include")
出现报错:
install.packages("dplyr", lib="/usr/local/Cellar/gcc/12.2.0/bin/c++-12/Library/Frameworks/R.framework/Resources/include") Warning in install.packages : 'lib = "/usr/local/Cellar/gcc/12.2.0/bin/c++-12/Library/Frameworks/R.framework/Resources/include"' is not writable Would you like to use a personal library instead? (yes/No/cancel) Error in install.packages : unable to install packages > install.packages("dplyr", lib="/usr/local/Cellar/gcc/12.2.0/bin/c++-12/Library/Frameworks/R.framework/Resources/include")
解决方案
1. 让R识别当前g++版本
方法一:创建软链接映射旧编译器路径
在终端执行以下命令,让R寻找的g++-7指向当前的g++-12:# 先创建旧版本gcc的bin目录(如果不存在) sudo mkdir -p /usr/local/Cellar/gcc/9.2.0/bin # 创建软链接 sudo ln -s /usr/local/Cellar/gcc/12.2.0/bin/g++-12 /usr/local/Cellar/gcc/9.2.0/bin/g++-7方法二:修改R环境变量指定编译器
在R控制台执行以下命令,临时指定编译器路径:Sys.setenv(CXX = "/usr/local/Cellar/gcc/12.2.0/bin/g++-12") Sys.setenv(CC = "/usr/local/Cellar/gcc/12.2.0/bin/gcc-12")若要永久生效,将上述两行代码添加到用户主目录下的
.Rprofile文件中(没有则新建),每次启动R时会自动加载。
2. 正确安装R包
使用默认路径安装:不要手动指定
lib参数到编译器路径,直接执行默认安装命令:install.packages("dplyr")若提示权限不足,选择"yes"使用个人库(推荐),避免使用sudo修改系统目录权限。
优先安装二进制版本:如果不想编译源码,直接指定安装二进制包,跳过源码编译步骤:
install.packages("dplyr", type = "binary")
内容的提问来源于stack exchange,提问作者lwe
相关产品推荐
相关产品推荐

