Ошибка при попытке скомпилировать с sourceCpp в R

0

Я новичок в C++ и пакет Rccp, но я нашел некоторый код в галерее rcpp, который позволяет генерировать из многомерного нормального распределения. Код

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;

// [[Rcpp::export]]
arma::mat mvrnormArma(int n, arma::vec mu, arma::mat sigma) {
   int ncols = sigma.n_cols;
   arma::mat Y = arma::randn(n, ncols);
   return arma::repmat(mu, 1, n).t() + Y * arma::chol(sigma);
}

Сохраняя его в файле multivgaussian.cpp, когда я пытаюсь скомпилировать его в R с помощью

sourceCpp("multivgaussian.cpp")

Я получаю это сообщение об ошибке

Error in dyn.load("/tmp/RtmpGoFAwi/sourcecpp_6a751b6a3bee/sourceCpp_67198.so") : 
  unable to load shared object '/tmp/RtmpGoFAwi/sourcecpp_6a751b6a3bee/sourceCpp_67198.so':
  /tmp/RtmpGoFAwi/sourcecpp_6a751b6a3bee/sourceCpp_67198.so: undefined symbol: _ZN4Rcpp8internal14r_vector_startILi13EEEPNS_6traits12storage_typeIXT_EE4typeEP7SEXPREC

Я также попытался понять, что произойдет (в терминале), если я попытаюсь скомпилировать его.

R CMD SHLIB multivgaussian.cpp
g++ -I/maths/R/lib64/R/include -DNDEBUG  -I/usr/local/include    -fpic  -g -O2  -c multivgaussian.cpp -o multivgaussian.o
multivgaussian.cpp:1:27: error: RcppArmadillo.h: No such file or directory
multivgaussian.cpp:4: error: ‘Rcpp is not a namespace-name
multivgaussian.cpp:4: error: expected namespace-name before ‘; token
multivgaussian.cpp:7: error: ‘arma has not been declared
multivgaussian.cpp:7: error: expected constructor, destructor, or type conversion before ‘mvrnormArma
make: *** [multivgaussian.o] Error 1

Это, наверное, что-то простое, но я ничего не нашел в Интернете. Большое спасибо, Charis

Теги:
rcpp

1 ответ

1
Лучший ответ

На этой неделе Rcpp выпустил релиз, который требует, чтобы его пакеты пользователей были перестроены. Убедитесь, что ваш RcppArmadillo также перестроен.

В примере R CMD SHLIB вы не говорите R о зависимости RcppArmadillo, поэтому он не может работать. В первом примере линия

// [[Rcpp::depends(RcppArmadillo)]]

позаботится об этом, но у вас все еще есть проблема с компоновщиком - возможно, из-за несоответствия версии.

  • 0
    Спасибо за быстрый ответ (@suspectus, @DirkEddelbuettel). Я только что узнал о новом выпуске Rcpp, и мне нужно обновить версию R, чтобы установить новый пакет. Я думаю, что так оно и будет. Я должен ждать до завтра, когда университет обновит мою версию R. Еще раз спасибо.
  • 0
    Ты не должен. Если у вас есть последовательные версии, то это должно работать. Только не обновляйте один из RcppArmadillo и Rcpp, но не другой.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню