直接在 Rcpp 中使用 (c)igraph(即,无需通过 R)

Use (c)igraph in Rcpp directly (i.e., without going through R)

本文关键字:igraph Rcpp      更新时间:2023-10-16

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

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

#include <igraph-0.7.1includeigraph.h>

但随后编译器抱怨它找不到实际代码(只有标头(:

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

将所有ipgraph编译为Rcpp依赖项似乎很困难,或者至少我找不到有关如何做到这一点的良好文档。

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

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

任何指针都会得到极大的赞赏。

虽然 R 包可以提供其他 R 包可以调用的 C 函数,但igraph包不会执行此操作。我看到了以下可能性:

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

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

  • 在包中包含igraphC 库。

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