c++ - 直接在 Rcpp 中使用 (c)igraph(即不通过 R)

标签 c++ r external igraph rcpp

我在 R 中使用 igraph。现在我正尝试迁移到 Rcpp。 igraph 是用 C 编写的,但可以从 R 调用。现在我想从 C++ 直接调用它。

目前我的 Rcpp C++ 代码调用 R,后者再次调用 C。这看起来很愚蠢。相反,我不想直接从我的 Rcpp C++ 代码调用 C 库。一种方法似乎是简单地下载 igraph header 并将其添加到 Rcpp 中:

#include <igraph-0.7.1\include\igraph.h>

但随后编译器提示它无法找到实际代码(仅 header ):

...
functions.o:functions.cpp:(.text+0x2fd): undefined reference to `igraph_matrix_set'
...

将所有 ipgraph 编译为 Rcpp 依赖似乎是一个 difficult ,或者至少我找不到关于如何做到这一点的好文档。

鉴于 igraph 是从 R 调用的,即在我的系统上运行,我怀疑应该有一种方法可以从 C++ 调用它而无需绕过 R,有点像

// [[Rcpp::depends(igraph)]]

如有任何指点,我们将不胜感激。

最佳答案

虽然 R 包可以提供其他 R 包可以调用的 C 函数,但 igraph 包不会这样做。我看到以下可能性:

  • 游说 igraph 包也在 C 级别提供其功能,最好是提供补丁。有关详细信息,请参阅 WRE。

  • 与系统安装的 igraph C 库链接,即您现在正在做的事情。

  • 在您的包中包含 igraph C 库。

  • 编写一个附加包,仅包含 igraph 库以及 C/C++ API 的必要代码。这在使用 Rcpp 时应该相对简单。

关于c++ - 直接在 Rcpp 中使用 (c)igraph(即不通过 R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57852537/

相关文章:

r - cowplot:如何通过修改轴限制来自定义主面板和边缘图之间的间隙?

css - 在 polymer 中加载外部 css 的条件模板

java - Spring 启动: how to use @PropertySource to point to a text file outside the jar?

c++ - 如何获取延迟模板参数的类型

c++ - 如何制作托管 (clr) 多线程 C++ .dll?

c++ - 如何为派生类正确编写赋值运算符

json - R data.frame 到带有子节点/分层结构的 JSON

r - install.packages 中的警告 : cannot open UR HTTP status was '404 Not Found'

javascript - vue-svg-loader 在加载 SVG 时删除一些 <g> 标签

c++ - GTK3 检测用户调整窗口大小