C++ Rcpp找不到gsl库

C++ Rcpp找不到gsl库,c++,r,rcpp,gsl,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-gn

我没有主意了

我试图为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()" `
useDynLib(RcppWilcoxonTest)
useDynLib(gsl)
useDynLib(WilcoxonTest)

import(Rcpp)

export(RcppWilcoxonTest)
我试过改变里面的各种东西

我的命名空间文件如下所示:

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

import(Rcpp)

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

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

可以在此处看到整个存储库:


在rcppwilcoxonest文件夹中

您需要在
src/Makevars
文件中包含以下内容:;也就是说(借用
RcppGSL
做事的方式):

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


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

Kevin的回答可能会对您有所帮助,但事实上,有一个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配置。

我试过Kevin和你的。在您的例子中,它只是说:在rcppwilcoxonest.cpp:1:0:./wilcoxonest.h:10:21:致命错误:RcppGSL.h:没有这样的文件或控制器。我完全按照你说的做了Makevars,还试着摸索。我还尝试将Import(RcppGSL)放到名称空间文件中。我还尝试将RcppGSL作为依赖项放在名称空间文件中。我需要了解-i和-L标志的作用,如果你不能掌握这一点,就学习一些更简单的东西。我在Rcpp书的第2章中的一个例子中慢慢地、详细地介绍了这一点。好的,谢谢,我会看看它们,尽管我相信我知道它们的含义。不幸的是,将它与R集成是我的要求之一。当您是cpp编译的初学者时,这不是最简单的任务,但我会想出一些办法。我也在考虑订购这本书,事实上我刚把它弄好。我从名称空间中删除了这些内容,甚至从Makevars文件中删除了所有内容,它只是。。作品我甚至重新启动了所有程序,以确保我没有意外地设置了一些随机变量。我最终使用了默认的gsl,因为我希望尽可能少地混合cpp和R—只需要一个方法调用。C++将在自己的共享库中进行繁重的操作。感谢您的快速响应和帮助,我在library.dynam(lib,package,package.lib)中发现一个错误:未找到共享对象“gsl.so”。我已经安装了gsl-dev。我的意思是-我在用GSL制作图书馆。我完全按照您所说的复制了内容,并在其中添加了“PKG_CPPFLAGS=-I.-I../inst/include”可能会提供一些信息。我最终没有使用RCPPPGSL,因为我不想混合R和C++代码,除了尽可能少的-只有一个方法调用。感谢您的帮助和快速响应。我不知道什么不起作用,因为现在我已经删除了NAMESPACE和makevar文件,它仍然在安装。我想你的答案更接近我的最终答案,所以格雷茨。我对它为什么开始工作感到困惑。。我想它会回来咬我,因为我不知道我为什么会被否决?