我尝试在Windows中从C
拨打R
代码double_metaphone.c。我熟悉R,但还没有尝试过C。
我已使用Cygwin gcc
编译代码并在Windows中创建了一个共享库,包括头文件double_metaphone.h
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
答案 0 :(得分:1)
按照我的理解" is.loaded"检查加载的符号。根据标题,您可以尝试:
is.loaded("DoubleMetaphone")
调用方法。尝试:
.C("DoubleMetaphone", <your>, <arguments>)
答案 1 :(得分:1)
您需要编译并链接R
以使shared object
可加载。 e.g。
$ 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
正如Dirk所说,R-exts为您提供了更多详细信息。
你想考虑 Rcpp 来编写R中的编译代码,这将使你在未来的道路上受益。