Я пытаюсь изучить использование Rcpp с R. Я использую машину с Windows 7 и, к сожалению, установил несколько разных компиляторов для разных проектов (python...). Когда я попытался выполнить предоставленный пример в пакете Rcpp, я получил ошибку. Код, который я пытался, был следующим:
CFib = cppFunction(
'int fibonacci(const int x) {
if (x == 0) return(0);
if (x == 1) return(1);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}')
Это не удалось со следующим сообщением из консоли:
g++ -m64 -I"C:/PROGRA~1/R/R-31~1.1/include" -DNDEBUG -I"C:/Users/jclutter/Documents/R/win-library/3.1/Rcpp/include" -I"d:/RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c file1c205fb26c00.cpp -o file1c205fb26c00.o
file1c205fb26c00.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in
#include <Rcpp.h>
^
make: *** [file1c205fb26c00.o] Error 1
Warning message:
running command 'make -f "C:/PROGRA~1/R/R-31~1.1/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-31~1.1/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="sourceCpp_22135.dll" WIN=64 TCLBIN=64 OBJECTS="file1c205fb26c00.o"' had status 2
Error in sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput, :
Error 1 occurred building shared library.
Я понимаю, что это связано с тем, что он, скорее всего, использует компилятор, который не был скомпилирован в 64-разрядную версию. У меня установлен Rtools версии 3.1, но он не является частью моего пути (не знаю, почему). Vice, вставив еще один компилятор в мой путь, я подумал, что могу использовать плагин Rcpp для решения этой проблемы. Ниже приведен код, который я пытался использовать:
rtoolsplug = Rcpp.plugin.maker(
Makevars = 'CXX = c:/Rtools/gcc-4.6.3/bin/g++.exe',
Makevars.win = 'CXX = c:/Rtools/gcc-4.6.3/bin/g++.exe'
)
registerPlugin('rtools', rtoolsplug)
CFib = cppFunction(
'int fibonacci(const int x) {
if (x == 0) return(0);
if (x == 1) return(1);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}',
plugins = c('rtools')
)
Когда я выполняю это, я получаю следующую ошибку (спойлер, это то же самое):
g++ -m64 -I"C:/PROGRA~1/R/R-31~1.1/include" -DNDEBUG -I"C:/Users/jclutter/Documents/R/win-library/3.1/Rcpp/include" -I"d:/RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c file1c206a9e1cf1.cpp -o file1c206a9e1cf1.o
file1c206a9e1cf1.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in
#include <Rcpp.h>
^
make: *** [file1c206a9e1cf1.o] Error 1
Warning message:
running command 'make -f "C:/PROGRA~1/R/R-31~1.1/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-31~1.1/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="sourceCpp_94004.dll" WIN=64 TCLBIN=64 OBJECTS="file1c206a9e1cf1.o"' had status 2
Error in sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput, :
Error 1 occurred building shared library.
Я думал, что наверняка смогу исправить это с помощью плагина. Я пытаюсь сделать это неправильно?
Для полноты вот версии моего программного обеспечения:
- Windows 7
- R: 3.1.1
- Rtools: 3.1 (почему-то нет в пути)
- Rcpp: 0.11.2
~/.Rprofile
некоторый код, который автоматически устанавливает соответствующие переменные среды при запуске сеанса R (при условии, что вы в основном заинтересованы в том, чтобы эта работа работала в R) - person Kevin Ushey   schedule 24.08.2014