Mac OSX Yosemite上的RcppGSL

时间:2018-02-23 20:18:18

标签: r rcpp autoconf

我正在尝试用Rcpp加速我的一个R程序,这将要求我使用几个GSL例程。但是,我在Mac OSX Yosemite(版本10.10.5)上安装RcppGSL时遇到了麻烦,希望你们中的一个可以提供帮助。我已经找到了几个关于在Windows上安装它的问题,但没有关于Mac的问题。我是一位经验丰富的R用户,但对C ++和Rcpp来说却是一个新手。我不想把它变成一个包 - 只是在我的机器上以交互方式使用它。

下面,我有一个最小的例子(我正在调用这个文件min_ex.cpp)GSL标题比最小例子中实际使用的更多 - 这些是我在实际代码中需要的。< / p>

#include <RcppGSL.h>

// [[Rcpp::depends(RcppGSL)]]
#include <cmath>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>
#include <gsl/gsl_integration.h>
#include <gsl/gsl_interp.h>
#include <gsl/gsl_multiroots.h>
#include <gsl/gsl_statistics_double.h>
#include <gsl/gsl_spline.h>

using namespace Rcpp;

// [[Rcpp::export]] 
NumericVector testFn(int nObs)
{
    Rprintf("Test print");

    RcppGSL::vector<double> Lambda01(nObs);

    return 0;

}

当我尝试使用sourceCpp()时会发生这种情况:

> library(Rcpp)
> library(RcppGSL)
> sourceCpp('~/Documents/PATH REDACTED/Rcpp/min_ex.cpp')
Error in dyn.load("/private/var/folders/xn/ggql1jjj1t5cbct50ff7yc_h0000gn/T/RtmpTJy2yB/sourceCpp-x86_64-apple-darwin13.4.0-0.12.15/sourcecpp_35001bd26245/sourceCpp_22.so") : 
  unable to load shared object '/private/var/folders/xn/ggql1jjj1t5cbct50ff7yc_h0000gn/T/RtmpTJy2yB/sourceCpp-x86_64-apple-darwin13.4.0-0.12.15/sourcecpp_35001bd26245/sourceCpp_22.so':
  dlopen(/private/var/folders/xn/ggql1jjj1t5cbct50ff7yc_h0000gn/T/RtmpTJy2yB/sourceCpp-x86_64-apple-darwin13.4.0-0.12.15/sourcecpp_35001bd26245/sourceCpp_22.so, 6): Symbol not found: _gsl_vector_calloc
  Referenced from: /private/var/folders/xn/ggql1jjj1t5cbct50ff7yc_h0000gn/T/RtmpTJy2yB/sourceCpp-x86_64-apple-darwin13.4.0-0.12.15/sourcecpp_35001bd26245/sourceCpp_22.so
  Expected in: flat namespace
 in /private/var/folders/xn/ggql1jjj1t5cbct50ff7yc_h0000gn/T/RtmpTJy2yB/sourceCpp-x86_64-apple-darwin13.4.0-0.12.15/sourcecpp_35001bd26245/sourceCpp_22.so

似乎这个问题可能与/Users/MYUSERNAME/.R/Makevars(我之前从未合作过)有关。这些是文件的当前内容:

CC=clang
CXX=clang++

我还尝试添加以下两个文本块但得到了同样的错误:

PKG_CPPFLAGS = $(GSL_CFLAGS)
PKG_LIBS = $(GSL_LIBS) 

PKG_LIBS = -lgsl -lgslcblas -lm -lgfortran

我的GSL标题位于/usr/local/include/gsl,但“获取信息”显示为/usr/local/Cellar/gsl/2.4/include/gsl

从阅读开始,似乎有些用户在RcppGSL示例中使用了configure.ac文件 - 即使我没有创建包,这是否适用?为了以防万一,我将configure.acMakevars.in复制到包含Rcpp的同一min_ex.cpp目录中,并创建了Rcpp/scr目录。我使用Homebrew安装了autoconf,并从autoconf configure.ac在终端中运行~/Documents/PATH REDACTED/Rcpp。我有更多的输出而不是有意义粘贴在这里,但它没有立即清楚是否有效,除了没有生成Makevars文件。我怎样才能在我的机器上正确运行它? (我想更普遍的是,我不太了解Makevars--我如何指示R使用一些反对/Users/MYUSERNAME/.R/Makevars的Makevars文件?)

提前谢谢!如果我能提供任何澄清,请告诉我。

已修改为我的R会话添加信息:

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X Yosemite 10.10.5

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] tools     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RcppGSL_0.3.3     Rcpp_0.12.15      SemiCompRisks_2.7 survival_2.41-3  
[5] MASS_7.3-45      

loaded via a namespace (and not attached):
[1] Matrix_1.2-8    withr_1.0.2     memoise_1.0.0   splines_3.3.2   grid_3.3.2     
[6] digest_0.6.12   devtools_1.12.0 lattice_0.20-34

已编辑以添加有关使用示例包的信息: 我将RcppGSL包复制到我的工作目录,并将以下代码添加到colNorm.cpp

// [[Rcpp::export]] 
Rcpp::NumericVector testFn(int nObs)
{
    Rprintf("Test print");

    RcppGSL::vector<double> Lambda01(nObs);

    return 0;

}

然后在RStudio中运行以下内容,正确更新了RcppExports.RRcppExports.cpp

compileAttributes(pkgdir="RcppGSLExample/", verbose=T)

在终端,我跑了:

R CMD build RcppGSLExample
R CMD INSTALL RcppGSLExample_0.0.3.tar.gz

但是当我将它加载到RStudio时,我能够使用colNorm复制该示例,但不能复制testFn。

> library(RcppGSLExample)
> M <- outer(sin(0:9), rep(1,10), "*") + outer(rep(1, 10), cos(0:9), "*")
> print(colNorm(M))
 [1] 4.314614 3.120504 2.193159 3.261141 2.534157 2.572810 4.204689
 [8] 3.652017 2.085236 3.073134
> testFn(2)
Error: could not find function "testFn"

你看到我可能缺少的任何步骤吗?谢谢!

0 个答案:

没有答案