【发布时间】:2020-01-11 03:12:27
【问题描述】:
我在 R 中使用 igraph。现在我正在尝试迁移到 Rcpp。 igraph 是用 C 编写的,但可以从 R 调用。现在从 C++ 我想直接调用它。
目前我的 Rcpp C++ 代码调用 R,它再次调用 C。这似乎很愚蠢。相反,我不想直接从我的 Rcpp C++ 代码中调用 C 库。一种方法,似乎是简单地下载 igraph 标头并将其添加到 Rcpp 中:
#include <igraph-0.7.1\include\igraph.h>
但是编译器抱怨它找不到实际的代码(只有头文件):
...
functions.o:functions.cpp:(.text+0x2fd): undefined reference to `igraph_matrix_set'
...
将所有 ipgraph 编译为 Rcpp 依赖项似乎是 difficult,或者至少我找不到关于如何完成此操作的好的文档。
鉴于 igraph 是从 R 调用的,即在我的系统上运行,我怀疑应该有一种方法可以从 C++ 调用它,而无需绕过 R,类似于
// [[Rcpp::depends(igraph)]]
任何指针都将不胜感激。
【问题讨论】:
-
您的包含路径看起来很可疑,它应该只是
#include <igraph.h>。您可能必须在您的 CMakeLists 或您用来包含标题的任何内容中修复它。 -
感谢您指出这一点,我将其更改为您的建议,并在 R 中添加了
Sys.setenv("PKG_CXXFLAGS"="-I'D:/path/to/folder/igraph-0.7.1/include/'"),它可以作为 bevofer,但不能解决原始问题 -
查看整个构建脚本可能有助于我们找到您的问题。
-
你不能在包含路径中使用反斜杠:它的含义不是由 C++ 标准定义的,实际上它在非 Windows 系统上不起作用。这是纳达所说的补充。
-
@nada,没有明确的构建脚本,因为我正在尝试将其设置为使用 Rcpp“开箱即用”运行。所以只有 Rcpp 在后台自动生成的内容。不知道该发布什么以更轻松地定位问题。
标签: c++ r external igraph rcpp