Rcpp找不到gsl库

时间:2014-01-29 21:04:24

标签: c++ r rcpp gsl

我的想法

我正在尝试为R创建一个库,但我无法加载它。

我得到的错误是

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/home/stenver/R/x86_64-pc-linux-gnu-    library/2.15/RcppWilcoxonTest/libs/RcppWilcoxonTest.so':
  /home/stenver/R/x86_64-pc-linux-gnu-library/2.15/RcppWilcoxonTest/libs/RcppWilcoxonTest.so:     undefined symbol: gsl_cdf_gaussian_Q
Error: loading failed

我的Makevars文件如下所示:

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

我试过改变那里的各种东西。

我的NAMESPACE文件如下所示:

useDynLib(RcppWilcoxonTest)
useDynLib(gsl)
useDynLib(WilcoxonTest)

import(Rcpp)

export(RcppWilcoxonTest)

失败发生在我尝试使用的动态共享库中。我已将动态库文件复制到src文件夹,因此R会自行编译它们,但它没用。理想情况下,我想将库和Rcpp接口实现保存在单独的文件夹中。

在某些时候,我也尝试使用RcppGSL,但它没有帮助,因为R在安装后无法找到包。

可以在这里看到整个存储库:

https://bitbucket.org/stenver/wilxoni-astaku-test/src/8c9b5da2cd9a97fd6c1a569e468c50ca95e2e06f?at=default

在RcppWilcoxonTest文件夹中

2 个答案:

答案 0 :(得分:3)

您需要src/Makevars文件中的以下内容;那是(借用RcppGSL做事的方式):

PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` `gsl-config --libs`

所以R知道在编译包时需要链接GSL。有关详细信息,请参阅R-exts

通过检查RcppGSL如何配置以查找GSL,并在包中使用类似的方法,您可以学到很多东西。

答案 1 :(得分:3)

凯文的回答可能会对你有所帮助,但实际上有一个CRAN包明确依赖于RcppGSL,其中我做了

edd@max:~/git/rcppziggurat/src$ cat Makevars
PKG_CPPFLAGS = -I. -I../inst/include
## Use the R_HOME indirection to support installations of multiple R version
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` \
           `$(R_HOME)/bin/Rscript -e "RcppGSL:::LdFlags()"`
edd@max:~/git/rcppziggurat/src$ 

我在这里为显示包裹了一行。

实质上,RcppGSL会调用Kevin提到的gsl-config