R studio安装R包时编译失败的解决方法

在尝试安装R包如cli时,遇到编译错误'c:/rtools40/mingw32/bin/gcc: No such file or directory'。原因是RTools的路径不正确。通过修改(R_HOME)/etc/i386和(R_HOME)/etc/x64下的makeconf文件,设置正确的RTOOLS40_HOME和BINPREF路径,解决了这个问题。在修改后重启R Studio,R包安装成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近在使用R studio的时候遇到一个奇怪的bug,想装某些需要gcc编译的R包却装不上,google一通后莫名其妙地修复了这个bug,这里记录一下,也想请懂原理的老哥们指点一下。
R version: R 4.1.2
OS: windows 10 20H2

bug示例

例如我想安装cli这个R包,需要对binary source code进行编译,运行install.packages之后显示如下报错

>install.packages("cli")

  有二进制版本的,但源代码版本是后来的:
    binary source needs_compilation
cli  3.1.1  3.2.0              TRUE

安装源码包‘cli’

trying URL 'https://cran.rstudio.com/src/contrib/cli_3.2.0.tar.gz'
Content type 'application/x-gzip' length 493192 bytes (481 KB)
downloaded 481 KB

* installing *source* package 'cli' ...
** package 'cli' successfully unpacked and MD5 sums checked
** using staged installation
Warning in parse(con, encoding = "UTF-8") :
  argument encoding="UTF-8" is ignored in MBCS locales
** libs

*** arch - i386
"c:/rtools40/mingw32/bin/"gcc  -I"E:/R-4.1.2/include" -DNDEBUG          -O2 -Wall  -std=gnu99 -mfpmath=sse -msse2 -mstackrealign  -c ansi.c -o ansi.o
sh: c:/rtools40/mingw32/bin/gcc: No such file or directory
make: *** [E:/R-4.1.2/etc/i386/Makeconf:238: ansi.o] Error 127
ERROR: compilation failed for package 'cli'
* removing 'E:/R-4.1.2/library/cli'
Warning in install.packages :
  installation of package ‘cli’ had non-zero exit status

比较关键的一行报错是

sh: c:/rtools40/mingw32/bin/gcc: No such file or directory

似乎是R的默认编译器路径不存在,查看了一下C盘,也确实没有这个文件夹,然后我用sys.which(‘make’)查看了一下我的make.exe的路径,发现被安装到E盘去了,因为是很久之前装的R 3.6.3,后来我update到了R 4.1.2,并不清楚为啥Rtools会在E盘,在stack overflow上搜了一下,发现了这两篇帖子
Why can’t I install properly rtools40 x64 Widows?
Rtools not being detected by R
于是按照了里面的操作,修改了R 4.1.2安装路径里的makeconf文件,解决了这个bug。

解决方法

makeconf在(R_HOME)/etc/i386和(R_HOME)/etc/x64这两个文件夹下,(R_HOME)代指你的R安装路径,例如我的就是E:/R-4.1.2,用记事本打开i386文件夹下的makeconf文件,找到如下代码段(应该就在刚开头10几行的样子)

## The rtools40 installer sets RTOOLS40_HOME, default to standard install path
RTOOLS40_HOME ?= c:/rtools40
RTOOLS40_ROOT ?= $(subst \,/,$(RTOOLS40_HOME))

## Things which are substituted by fixed/Makefile (and also -O2 -> -O2)
WIN = 32
MINGW_PREFIX = /mingw$(WIN)
BINPREF ?= "$(RTOOLS40_ROOT)/mingw32/bin/"
COMPILED_BY = gcc-8.3.0

修改RTOOLS40_HOME的路径为Rtools的实际安装路径,并把BINPREF的路径也修改成对应的路径

## The rtools40 installer sets RTOOLS40_HOME, default to standard install path
RTOOLS40_HOME ?= E:/Rtools
RTOOLS40_ROOT ?= $(subst \,/,$(RTOOLS40_HOME))

## Things which are substituted by fixed/Makefile (and also -O2 -> -O2)
WIN = 32
MINGW_PREFIX = /mingw$(WIN)
BINPREF ?= "$(RTOOLS40_ROOT)/mingw_32/bin/"
COMPILED_BY = gcc-8.3.0

同样地,也需要修改x64文件夹下的makeconf文件,修改完后如下所示,区别在于一个是mingw_32,一个是mingw_64,分别对应32位和64位的,原帖中说如果安装的是32位就修改i386下的makeconf,如果是64位就修改x64,但实测需要两个都修改才能起效。

## The rtools40 installer sets RTOOLS40_HOME, default to standard install path
RTOOLS40_HOME ?= E:/Rtools
RTOOLS40_ROOT ?= $(subst \,/,$(RTOOLS40_HOME))

## Things which are substituted by fixed/Makefile (and also -O2 -> -O2)
WIN = 64
MINGW_PREFIX = /mingw$(WIN)
BINPREF ?= "$(RTOOLS40_ROOT)/mingw_64/bin/"
COMPILED_BY = gcc-8.3.0

修改完成后,重启一下R studio(或者restart r session),再次安装R包并编译

>install.packages("cli")

  有二进制版本的,但源代码版本是后来的:
    binary source needs_compilation
cli  3.1.1  3.2.0              TRUE

安装源码包‘cli’

trying URL 'https://cran.rstudio.com/src/contrib/cli_3.2.0.tar.gz'
Content type 'application/x-gzip' length 493192 bytes (481 KB)
downloaded 481 KB

* installing *source* package 'cli' ...
** package 'cli' successfully unpacked and MD5 sums checked
** using staged installation
Warning in parse(con, encoding = "UTF-8") 
### 解决方案 在开发过程中遇到 `R` 文件无法解析的问题通常是由于配置错误或构建工具版本不匹配引起的。以下是针对该问题的具体分析和解决方案: #### 1. **确认Gradle插件版本** 如果项目使用的 Gradle 插件版本过旧或者与当前 Android Studio 不兼容,则可能导致编译失败并引发 `R` 文件不可见的情况。确保项目的 `build.gradle` 配置文件中的 Gradle 插件版本是最新的[^3]。 ```groovy // Project-level build.gradle buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.4.2' // 使用最新稳定版 } } ``` #### 2. **安装必要的SDK Build Tools** 当升级 Android Studio 或切换到新项目,可能缺少所需的 SDK 构建工具版本。这通常会触发类似于 “Install Android SDK Build-Tools”的提示消息。通过以下方法解决问题[^2]: - 打开 Android Studio 的菜单栏。 - 如果未打开任何项目,请点击 `Configure > SDK Manager`。 - 转至 `SDK Tools` 标签页。 - 勾选底部的 `Show Package Details`。 - 安装指定版本 (如 25.0.3) 的 Android SDK Build Tools。 #### 3. **清理与重建项目** 有缓存数据可能会干扰正常的构建过程。执行以下操作可以清除潜在的冲突: - 在顶部菜单中依次选择 `Build > Clean Project` 和 `Rebuild Project`。 - 若上述步骤未能生效,尝试删除 `.idea/`, `build/` 目录以及隐藏目录下的 `*.iml` 文件后再重新导入工程。 #### 4. **检查名重构的影响** 如果你最近更改了应用的名称而没有同步修改对应的资源路径字符串,那么也可能造成此异常现象发生。注意,在重命名的过程中,IDE 提供的功能未必能完全覆盖所有的引用位置;因此手动核查是否存在残留的老类名指向是非常重要的[^5]。 例如,假设原先是 `com.example.oldapp.MainActivity` ,现在更改为 `com.newdomain.myapp.MainActivity` 后仍保留如下定义则需修正: ```xml <activity android:name="com.example.oldapp.MainActivity"/> ``` 应调整为: ```xml <activity android:name=".MainActivity"/> ``` --- ### 总结 综上所述,要修复 `Package R does not exist` 错误可以从以下几个方面入手:一是核实所依赖的 Gradle 插件是否适配当前环境设置;二是补充缺失的基础组件比如特定编号的 SDK 工具集;三是借助 IDE 自带功能完成彻底清洗再装配流程;四是细致排查因结构调整带来的连锁反应尤其是涉及全局唯一标识符的部分像这里提到的声明变更情形. ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值