带有 Rcpp 代码的包不会在 windows 上构建
Package with Rcpp code won't build on windows
我不确定我做了什么,但我似乎无法构建包含 Rcpp 代码的这个包。我已经适当地安装了 MinGW(我认为)并将其添加到我的路径中(我认为)。
坦白说,我几乎没在 windows 上工作过。
当我尝试构建和重新加载时,这是我得到的错误:
Warning: running command 'make -f "C:/PROGRA~1/R/R-32~1.4RE/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-32~1.4RE/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="packagename.dll" WIN=64 TCLBIN=64 OBJECTS="RcppExports.o somefunC.o somefunC.o"' had status 127
ERROR: compilation failed for package 'packagename'
要检查的一些基本事项:
library(devtools)
find_rtools() # TRUE
has_devel()
"C:/PROGRA~1/R/R-32~1.4RE/bin/x64/R" --no-site-file --no-environ \
--no-save --no-restore --quiet CMD SHLIB foo.c
gcc -m64 -I"C:/PROGRA~1/R/R-32~1.4RE/include" -DNDEBUG -I"d:/RCompile/r-compiling/local/local323/include" -O2 -Wall -std=gnu99 -mtune=core2 -c foo.c -o foo.o
gcc -m64 -shared -s -static-libgcc -o foo.dll tmp.def foo.o -Ld:/RCompile/r-compiling/local/local323/lib/x64 -Ld:/RCompile/r-compiling/local/local323/lib -LC:/PROGRA~1/R/R-32~1.4RE/bin/x64 -lR
[1] TRUE
电脑上的系统路径变量:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Brackets\command; C:\Program Files\nodejs\;C:\Program Files (x86)\Skype\Phone\;C:\MinGW\bin;C:\MinGW\msys.0\bin
几个注意事项:
- 在我的描述文件中,我导入了 Rcpp,并添加了 link LinkingTo: Rcpp
- 在我的包文档中我有
@useDynLib packagename
指令
- 我的包裹里还有
@importFrom Rcpp evalCpp
更新:
- 当我删除 src 目录时,包会生成。
evalCpp("2+2")
按预期工作
- 现在 RBuildTools 在路径上,我看到 "pure virtual method" 在我重新启动 R 时出现。
- 我也收到一条新的错误信息 c:/Rtools/mingw_64/bin/g++;未找到。这很有趣,因为 Rtools 安装在名为 RBuildTools 的文件夹(我没有选择)中,并且在路径中。
虽然我不知道是什么具体步骤导致了我的解决方案(或者可能是组合),但此系统上安装的 RTools 肯定有问题。
- 更新到较新的 R 版本
- 再次安装包
- 已安装 MingW
- 已将 MingW 添加到路径
- 在 C:/Rtools 重新安装了 Rtools(它在这台机器上的 RBuildTools)
- 删除了路径中对 RBuildTools/ 的引用,将它们更改为 Rtools/
我怀疑是 Rtools 的非标准位置导致了问题。但我对 windows 版本的了解还不够多,无法推测。
我不确定我做了什么,但我似乎无法构建包含 Rcpp 代码的这个包。我已经适当地安装了 MinGW(我认为)并将其添加到我的路径中(我认为)。
坦白说,我几乎没在 windows 上工作过。
当我尝试构建和重新加载时,这是我得到的错误:
Warning: running command 'make -f "C:/PROGRA~1/R/R-32~1.4RE/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-32~1.4RE/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="packagename.dll" WIN=64 TCLBIN=64 OBJECTS="RcppExports.o somefunC.o somefunC.o"' had status 127
ERROR: compilation failed for package 'packagename'
要检查的一些基本事项:
library(devtools)
find_rtools() # TRUE
has_devel()
"C:/PROGRA~1/R/R-32~1.4RE/bin/x64/R" --no-site-file --no-environ \
--no-save --no-restore --quiet CMD SHLIB foo.c
gcc -m64 -I"C:/PROGRA~1/R/R-32~1.4RE/include" -DNDEBUG -I"d:/RCompile/r-compiling/local/local323/include" -O2 -Wall -std=gnu99 -mtune=core2 -c foo.c -o foo.o
gcc -m64 -shared -s -static-libgcc -o foo.dll tmp.def foo.o -Ld:/RCompile/r-compiling/local/local323/lib/x64 -Ld:/RCompile/r-compiling/local/local323/lib -LC:/PROGRA~1/R/R-32~1.4RE/bin/x64 -lR
[1] TRUE
电脑上的系统路径变量:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Brackets\command; C:\Program Files\nodejs\;C:\Program Files (x86)\Skype\Phone\;C:\MinGW\bin;C:\MinGW\msys.0\bin
几个注意事项:
- 在我的描述文件中,我导入了 Rcpp,并添加了 link LinkingTo: Rcpp
- 在我的包文档中我有
@useDynLib packagename
指令 - 我的包裹里还有
@importFrom Rcpp evalCpp
更新:
- 当我删除 src 目录时,包会生成。
evalCpp("2+2")
按预期工作- 现在 RBuildTools 在路径上,我看到 "pure virtual method" 在我重新启动 R 时出现。
- 我也收到一条新的错误信息 c:/Rtools/mingw_64/bin/g++;未找到。这很有趣,因为 Rtools 安装在名为 RBuildTools 的文件夹(我没有选择)中,并且在路径中。
虽然我不知道是什么具体步骤导致了我的解决方案(或者可能是组合),但此系统上安装的 RTools 肯定有问题。
- 更新到较新的 R 版本
- 再次安装包
- 已安装 MingW
- 已将 MingW 添加到路径
- 在 C:/Rtools 重新安装了 Rtools(它在这台机器上的 RBuildTools)
- 删除了路径中对 RBuildTools/ 的引用,将它们更改为 Rtools/
我怀疑是 Rtools 的非标准位置导致了问题。但我对 windows 版本的了解还不够多,无法推测。