Опитвам се да разгледам използването на 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 Plugin, за да реша проблема. Следното е кодът, който се опитах да използвам:
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