我正在尝试从windows中的R调用C代码double_metaphone.c。我对R很熟悉,但还没有尝试过C。
我已经编译了代码,并在windows中使用包括头文件double_metaphone.h的Cygwin gcc创建了一个共享库,如下所示
gcc -c double_metaphone.c
gcc -shared -o double_metaphone.dll double_metaphone.o我已经使用dyn.load加载了dll文件,如下所示
dyn.load("C:/R/double_metaphone.dll")但是,getLoadedDLLs()列出了double_metaphone.dll
is.loaded(double_metaphone.dll)给出了错误
Error in is.loaded(double_metaphone.dll) :
object 'double_metaphone.dll' not found当我尝试使用.C()或.Call()时,我得到
Error in .C("double_metaphone") :
C symbol name "double_metaphone" not in load table我知道这是C++代码的问题,就像在Link1,Link中一样,但是为什么我不能访问共享库来从R调用C代码呢?我哪里错了?
发布于 2014-07-22 19:17:21
据我所知,"is.loaded“会检查加载的符号。根据您的标题,您可以尝试:
is.loaded("DoubleMetaphone")来调用该方法。尝试:
.C("DoubleMetaphone", <your>, <arguments>)发布于 2014-08-12 02:22:36
为了使shared object可加载,您需要针对R进行编译和链接。例如:
$ gcc -I/YOUR_R_HOME_DIR/include -DNDEBUG -fpic -c double_metaphone.c -o double_metaphone.o
$ gcc -shared -o double_metaphone.dll double_metaphone.o -L/YOUR_R_HOME_DIR/lib -lR或者简单地说
$ R CMD SHLIB double_metaphone.c正如德克所说,R-exts为您提供了更多细节。
并且您希望考虑使用Rcpp用R编写编译后的代码,这对您以后的工作更有好处。
https://stackoverflow.com/questions/24885375
复制相似问题