R 使用 mingw_32 为 64 位架构编译包
R is using the mingw_32 to compile packages for 64-bit architecture
定期 - 我想每当我更新 R - 我在我的 64 位 Windows 机器上从源安装包时遇到问题。
今天我正在尝试使用 devtools::install_github()
安装一个包。安装在我的笔记本电脑上进行得很好,但在我的台式机上却不行,它可以在 *** arch - i386
下安装软件包,但在 *** arch - x64
下会报告错误消息
C:/PROGRA~1/R/R-34~1.4/bin/x64/R.dll: file not recognized: File format not recognized
导致错误的命令是
C:/Rtools/mingw_32/bin/g++ -shared -s -static-libgcc -o PACKAGENAME.dll [...]
我认为错误的产生是因为 R 正在使用 mingw_32 来尝试编译 64 位包。问题是,我在哪里可以告诉 R 使用 mingw_64?我已经检查了所有我能记得的地方:
R-3.4.4/etc/x64/Makeconf
州
BINPREF ?= c:/Rtools/mingw_64/bin/
- 我的系统
PATH
(使用 Sys.getenv('PATH')
从 R 内部验证)在 mingw_32 之前包含 mingw_64。
R 一定是在寻找其他地方来决定使用哪个编译器...但是在哪里?
如果您从 devtools::install_github
开始挖掘,它将引导您完成以下功能:
devtools::install_github
devtools:::install_remotes
devtools:::try_install_remote
devtools:::install_remote
devtools:::install
devtools:::check_build_tools
devtools:::setup_rtools
devtools:::scan_path_for_rtools
并且当您 运行 以下代码时:
devtools:::scan_path_for_rtools(TRUE)
devtools:::setup_rtools(debug=TRUE)
很可能是说当前未安装 Rtools。 (是的,有点违反直觉,因为您已经将它安装在 C:/Rtools 中,但可能未在注册表中注册)
要修复它,您需要 运行(本质上是 Rtools is not being detected from RStudio 中的解决方案)
Sys.setenv(PATH=paste0("C:\Rtools\bin;", Sys.getenv("PATH")))
devtools:::set_rtools_path(structure(list(path="c:/Rtools/mingw_64/bin", version=3.4), class="rtools"))
devtools:::set_rtools_path(structure(list(path="c:/Rtools/mingw_32/bin", version=3.4), class="rtools"))
如果这有效,请告诉我。
BINPREF ?= c:/Rtools/mingw_64/bin/
删除?之前 =
通过R CMD check not looking for gcc in Rtools directory:
R 在 C:/Users/MYUSERNAME/Documents/.R/Makevars
中查找 BINPREF
的值。删除此文件的内容删除了不正确的位置。
$RPATH/etc/i386/Makeconf
是 re-created 每个新安装的 R,并且包含行
BINPREF ?= c:/Rtools/mingw_32/bin/
.
?=
运算符将设置 BINPREF
的值(如果尚未设置),就像在上面提到的 Makevars
文件中一样。因此,将 ?=
替换为 =
将一直有效,直到安装了新版本的 R 并覆盖了 Makeconf
文件——更新或卸载,R 不会修改 Makevars
文件在用户目录中。
定期 - 我想每当我更新 R - 我在我的 64 位 Windows 机器上从源安装包时遇到问题。
今天我正在尝试使用 devtools::install_github()
安装一个包。安装在我的笔记本电脑上进行得很好,但在我的台式机上却不行,它可以在 *** arch - i386
下安装软件包,但在 *** arch - x64
下会报告错误消息
C:/PROGRA~1/R/R-34~1.4/bin/x64/R.dll: file not recognized: File format not recognized
导致错误的命令是
C:/Rtools/mingw_32/bin/g++ -shared -s -static-libgcc -o PACKAGENAME.dll [...]
我认为错误的产生是因为 R 正在使用 mingw_32 来尝试编译 64 位包。问题是,我在哪里可以告诉 R 使用 mingw_64?我已经检查了所有我能记得的地方:
R-3.4.4/etc/x64/Makeconf
州BINPREF ?= c:/Rtools/mingw_64/bin/
- 我的系统
PATH
(使用Sys.getenv('PATH')
从 R 内部验证)在 mingw_32 之前包含 mingw_64。
R 一定是在寻找其他地方来决定使用哪个编译器...但是在哪里?
如果您从 devtools::install_github
开始挖掘,它将引导您完成以下功能:
devtools::install_github
devtools:::install_remotes
devtools:::try_install_remote
devtools:::install_remote
devtools:::install
devtools:::check_build_tools
devtools:::setup_rtools
devtools:::scan_path_for_rtools
并且当您 运行 以下代码时:
devtools:::scan_path_for_rtools(TRUE)
devtools:::setup_rtools(debug=TRUE)
很可能是说当前未安装 Rtools。 (是的,有点违反直觉,因为您已经将它安装在 C:/Rtools 中,但可能未在注册表中注册)
要修复它,您需要 运行(本质上是 Rtools is not being detected from RStudio 中的解决方案)
Sys.setenv(PATH=paste0("C:\Rtools\bin;", Sys.getenv("PATH")))
devtools:::set_rtools_path(structure(list(path="c:/Rtools/mingw_64/bin", version=3.4), class="rtools"))
devtools:::set_rtools_path(structure(list(path="c:/Rtools/mingw_32/bin", version=3.4), class="rtools"))
如果这有效,请告诉我。
BINPREF ?= c:/Rtools/mingw_64/bin/
删除?之前 =
通过R CMD check not looking for gcc in Rtools directory:
R 在 C:/Users/MYUSERNAME/Documents/.R/Makevars
中查找 BINPREF
的值。删除此文件的内容删除了不正确的位置。
$RPATH/etc/i386/Makeconf
是 re-created 每个新安装的 R,并且包含行
BINPREF ?= c:/Rtools/mingw_32/bin/
.
?=
运算符将设置 BINPREF
的值(如果尚未设置),就像在上面提到的 Makevars
文件中一样。因此,将 ?=
替换为 =
将一直有效,直到安装了新版本的 R 并覆盖了 Makeconf
文件——更新或卸载,R 不会修改 Makevars
文件在用户目录中。