首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在R中加载C共享库

无法在R中加载C共享库
EN

Stack Overflow用户
提问于 2014-07-22 18:51:40
回答 2查看 564关注 0票数 0

我正在尝试从windows中的R调用C代码double_metaphone.c。我对R很熟悉,但还没有尝试过C。

我已经编译了代码,并在windows中使用包括头文件double_metaphone.hCygwin gcc创建了一个共享库,如下所示

代码语言:javascript
复制
gcc -c double_metaphone.c
gcc -shared -o double_metaphone.dll double_metaphone.o

我已经使用dyn.load加载了dll文件,如下所示

代码语言:javascript
复制
dyn.load("C:/R/double_metaphone.dll")

但是,getLoadedDLLs()列出了double_metaphone.dll

代码语言:javascript
复制
is.loaded(double_metaphone.dll)

给出了错误

代码语言:javascript
复制
Error in is.loaded(double_metaphone.dll) : 
  object 'double_metaphone.dll' not found

当我尝试使用.C().Call()时,我得到

代码语言:javascript
复制
Error in .C("double_metaphone") : 
  C symbol name "double_metaphone" not in load table

我知道这是C++代码的问题,就像在Link1Link中一样,但是为什么我不能访问共享库来从R调用C代码呢?我哪里错了?

EN

回答 2

Stack Overflow用户

发布于 2014-07-22 19:17:21

据我所知,"is.loaded“会检查加载的符号。根据您的标题,您可以尝试:

代码语言:javascript
复制
is.loaded("DoubleMetaphone")

来调用该方法。尝试:

代码语言:javascript
复制
.C("DoubleMetaphone", <your>, <arguments>)
票数 1
EN

Stack Overflow用户

发布于 2014-08-12 02:22:36

为了使shared object可加载,您需要针对R进行编译和链接。例如:

代码语言:javascript
复制
$ 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

或者简单地说

代码语言:javascript
复制
$ R CMD SHLIB double_metaphone.c

正如德克所说,R-exts为您提供了更多细节。

并且您希望考虑使用Rcpp用R编写编译后的代码,这对您以后的工作更有好处。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24885375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档