Как использовать Rcpp с TDM-gcc 4.8.1?

Я использую R 3.0.2 под Windows 7 (32-разрядная версия) и имею в пути TDM-GCC-32 (gcc (tdm-2) 4.8.1).

Когда я пытаюсь использовать cppFunction, я получаю ошибку:

library(inline)
library(Rcpp)
src <- '
SEXP hellofun(){
 std::vector<std::string> s;
  s.push_back("hello");
s.push_back("world");
return Rcpp::wrap(s);
}'
hello_fun <- cppFunction(src)

Сообщение об ошибке:

Error in inDL(x, as.logical(local), as.logical(now), ...) (from file1c8c8c929f5.cpp.R#1) : 
  unable to load shared object 'C:/Users/ssss11/AppData/Local/Temp/RtmpeywSmo/sourcecpp_1c8c47543253/sourceCpp_60750.dll':
  LoadLibrary failure:  Invalid access to memory location

Однако, когда я запускаю пример (cfuntion), он преуспевает.

library(inline)
example(cfunction)

Как решить эту проблему?


person Shuguang    schedule 25.01.2014    source источник


Ответы (1)


Я понятия не имею, что такое TDM-GCC-32 (gcc (tdm-2) 4.8.1), но в нашей документации неоднократно подчеркивается, что в Windows поддерживается только один компилятор: тот, который поставляется с версией Rtools, соответствующие вашей версии R.

Теперь «TDM-gcc-32» вполне может быть совместим по функциям, но если вы хотите его использовать, вам, вероятно, придется перестроить весь стек R (то есть сам R, все пакеты,...) с этим.

Так что, возможно, лучше подождать, пока R Core / CRAN обновит Rtools до версии, более новой, чем gcc-4.6.*

person Dirk Eddelbuettel    schedule 25.01.2014
comment
Это интересно - спасибо за попытку. Может быть, вы могли бы подытожить свои шаги в сообщении на r-devel. Вполне могут быть и другие пользователи Windows, которые захотят попробовать более новый компилятор. - person Dirk Eddelbuettel; 26.01.2014
comment
@Shuguang Я тоже перекомпилировал Rcpp и его зависимости, используя недавний g++ (здесь 4.8.2). Как вы проверили и подтвердили, что обработка исключений работает должным образом из функций, полученных от Rcpp? - person Thell; 29.01.2014
comment
@Thell Извини. Я не делал такого глубокого теста. - person Shuguang; 02.02.2014