使用Rcpp代码的软件包不会在Windows

时间:2016-09-03 00:29:33

标签: r rcpp

我不确定我做了什么,但我似乎无法在包含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 \ 1.0 \ bin

几点说明:

  • 在我的descrition文件中导入Rcpp,我添加了链接LinkingTo:Rcpp
  • 在我的包文档中,我有@useDynLib packagename指令
  • 在我的包裹中,我也有@importFrom Rcpp evalCpp

更新:

  • 当我删除src目录时,程序包会构建。
  • evalCpp("2+2")按预期工作
  • 现在RBuildTools正在路上,我看到了一个纯粹的虚拟方法"当我重新启动R.时出现。
  • 我还收到一条新的错误消息c:/ Rtools / mingw_64 / bin / g ++;未找到。这很有趣,因为Rtools安装在一个名为RBuildTools的文件夹中(我没有选择)并且在路径中。

1 个答案:

答案 0 :(得分:4)

虽然我不知道导致我的解决方案(或者可能是组合)的具体步骤,但是在这个系统上安装RTools肯定存在一些问题。

  • 已更新至较新的R版
  • 再次安装包
  • Intalled MingW
  • 将MingW添加到路径
  • 在C:/ Rtools重新安装了Rtools(这台机器上的RBuildTools)
  • 删除了RBuildTools /的路径中的引用,将它们更改为Rtools /

我怀疑Rtools的非标准位置导致了这个问题。但我对Windows版本的推测知之甚少。