我在 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/