我在C中的知识作为新用户非常有限,我有一些用C编写的代码,我需要在R中使用。我尝试使用" gsl_integration"图书馆。因为代码需要传递给可能没有安装GSL库的不同人员,所以我创建了我的" integration.h"包含" gsl_integration"中所有函数和依赖项的文件。图书馆。我可以使用
编译我的code.c文件$ R CMD SHLIB code.c
这是我得到的输出
-I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
-I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include
-fPIC -Wall -mtune=core2 -g -O2 -c code.c -o code.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined
dynamic_lookup -single_module -multiply_defined suppress
-L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o code.so code.o
-F/Library/Frameworks/R.framework/..
-framework R -Wl,-framework -Wl,CoreFoundation
当我尝试dyn.load" code.so" R中的文件我收到以下错误
Error in dyn.load("code.so") :
unable to load shared object '/Users/Thodoris/Desktop/Int_C/code.so':
dlopen(/Users/Thodoris/Desktop/Int_C/code.so, 6): Symbol not found: _gsl_integration_qags
Referenced from: /Users/Thodoris/Desktop/Int_C/code.so
Expected in: flat namespace
in /Users/Thodoris/Desktop/Int_C/code.so
我想R试图找到图书馆的方式有问题吗? 我有什么想法可以解决这个问题吗?
答案 0 :(得分:2)
你没有与GSL联系。
您可能想要模仿的一个软件包是我的RcppZiggurat软件包,它执行此操作:
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "RcppGSL:::LdFlags()"`
即它有一个函数,通过调用我的RcppGSL包来返回正确的库位置,该包在其包启动时学习该位置一次。