Я пытаюсь вызывать код C
double_metaphone.c из R
в окнах. Я знаком с R, но пока не пробовал C.
Я скомпилировал код и создал общую библиотеку следующим образом в окнах, используя Cygwin gcc
включая файл заголовка 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
Я понимаю, что это проблема с кодом C++, как в Link1, Link, но почему я не могу получить доступ к общей библиотеке для вызова кода C из R? Где я иду не так?
Вам необходимо скомпилировать и связать с R
для shared object
использования shared object
. например
$ 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, что приносит вам пользу в дальнейшем.
В соответствии с моим пониманием "is.loaded" проверяет загруженные символы. В соответствии с вашим заголовком вы можете попробовать:
is.loaded("DoubleMetaphone")
Вызов метода. пытаться:
.C("DoubleMetaphone", <your>, <arguments>)