Rcpp与RcppArmadillo使用sourceCpp()时出错

时间:2013-11-03 22:28:53

标签: r rcpp armadillo

我对C ++很陌生,但是花了很多时间在R上。我正在尝试使用RcppArmadillo,其中使用sourceCpp函数来源.cpp文件。我的示例代码来自

http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2013-June/006150.html

并显示如下:

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

// [[Rcpp::export]]
arma::colvec rowSumsRcppArmadillo(NumericMatrix x){
  arma::mat X = arma::mat(x.begin(), x.nrow(), x.ncol(), false);
  return arma::sum(X, 1);
}

我安装了Rcpp和RcppArmadillo软件包,并成功使用Rcpp(没有RcppArmadillo)来集成C ++函数。但是,对于RcppArmadillo,我收到以下错误:

> sourceCpp("rowSums.cpp")
ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-    darwin8/4.2.3/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3'
ld: library not found for -lgfortran
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sourceCpp_76327.so] Error 1

...

Error in sourceCpp("rowSums.cpp") : 
Error 1 occurred building shared library.

有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:3)

请参阅错误:ld: library not found for -lgfortran

你需要安装Fortran库,因为RcppArmadillo在src/Makevars中有这个:

PKG_LIBS=`$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` \
          $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

你通过R获得Lapack和Blas,但需要Fortran库。有关R的具体位置,请参阅R的OS X文档;我相信这个地方是Simon's page at AT&T但我自己不是OS X用户。如果有疑问,请询问r-sig-mac,其中还有许多讨论线程,涉及OS X 10.9升级时发生的各种破坏。

答案 1 :(得分:2)

我遇到了同样的问题。 我只是去http://cran.r-project.org/bin/macosx/tools/ 并在我的计算机上安装gfortran-4.2.3.pkg,然后使用sourceCpp,然后就可以了。你可以试试这个,这是我现在发现的最简单的方法。

答案 2 :(得分:0)

如果还有像我这样的其他人在构建&#39;和&#39;检查&#39;在您为Mac安装了一个推荐的fortran库之后,使用Armadillo项目,您需要关注the instructions here

我试图更改shell中的LDFLAGS环境变量,但它没有通过。但是,在〜/ .R / Makevars中正确设置它似乎有效。