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 ?