R中的GSL库

我正在写一个我将在R中使用的C代码。为了在C中进行矩阵运算,我添加了“gsl_matrix”库。 当我使用R CMD SHLIB编译时,它编译没有问题。 但是当我打开R并尝试编写dyn.load(“file.so”)时,我收到一条错误消息:

unable to load shared object file.so undefined symbol: gsl_matrix_alloc 

我的错误在哪里?

我怀疑这与你没有正确链接到GSL库的共享库有关,正如在R-devel上讨论的那样 ,或者是关于编写R扩展的手册,建议使用Makevars文件(类似于PKG_LIBS=-L/usr/lib -lgsl )。 否则,按照help(SHLIB)的示例,您可能想尝试:

 $ R CMD SHLIB file.c -lgsl -lgslcblas 

有一个简单的教程, R Call GSL ,它显示了调用GSL函数的基本设置。

我能够重现玩具示例,我重命名为nperms.{c,r}如下(在Mac上,使用-dynamiclib开关代替-shared ):

 ~/scratch $ gcc -c nperms.c ~/scratch $ file nperms.o nperms.o: Mach-O 64-bit object x86_64 ~/scratch $ gcc -dynamiclib -lgsl -lgslcblas -o libnperms.dylib -dylib nperms.o ~/scratch $ ls *nperm* libnperms.dylib nperms.c nperms.o ~/scratch $ file libnperms.dylib libnperms.dylib: Mach-O 64-bit dynamically linked shared library x86_64 

dyn.load libnperms.dylib在R中时,一切正常。但是,使用从R CMD SHLIB生成的共享库而无需进一步参数

 ~/scratch $ R CMD SHLIB nperms.c gcc -arch x86_64 -std=gnu99 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -o nperms.so nperms.o -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation ~/scratch $ ls *nperm* libnperms.dylib nperms.c nperms.o nperms.r nperms.so ~/scratch $ file nperms.so nperms.so: Mach-O 64-bit dynamically linked shared library x86_64 

引发以下错误(对不起法语区域设置)

 > dyn.load("nperms.so") Erreur dans dyn.load("nperms.so") : impossible de charger l'objet partag'e '/Users/chl/scratch/nperms.so': dlopen(/Users/chl/scratch/nperms.so, 6): Symbol not found: _gsl_permutation_alloc Referenced from: /Users/chl/scratch/nperms.so Expected in: flat namespace in /Users/chl/scratch/nperms.so 

我没有直接回答你的问题,但是你试过http://cran.r-project.org/web/packages/RcppGSL/index.html或http://cran.r-project.org/web/packages /RcppArmadillo/index.html ?