我有一些利用igraph库的 c 代码。我想在它周围放一个 R 包装器并将其作为 R 包发送给 CRAN。
igraph在 CRAN 上已经有一个 R 端口,所以我的 R 包 'foo' 依赖于 R 的 igraph 是有意义的。由于 foo 使用自己的依赖于 C igraph 的 C 代码,我如何将我的 C 函数链接到原始 igraph 库?我读过这是在一个名为 Makevars 的文件中完成的,但是链接到外部库非常麻烦。
如果这不可能,是否最好只复制整个 igraph 源代码并将整个内容放入我的 /src 目录中?R igraph 包已经有一个名为 Makevars 的文件,但我不明白所有 c 文件是如何构建的——通常在我的 Makefile 中我有类似 gcc(一些 .c 源文件列表)-o 之类的东西,但 Makevar 只包含
PKG_CFLAGS=-DUSING_R -I. -Ics -Iglpk -Iglpk/amd -Iglpk/colamd \
-g -O2 -I/usr/include/libxml2 -g -O2 -I/usr/include/libxml2 -DNDEBUG \
-DPACKAGE_VERSION=\"0.6\" -DINTERNAL_ARPACK \
-DIGRAPH_THREAD_LOCAL=/**/
PKG_CXXFLAGS= -DUSING_R -DIGRAPH_THREAD_LOCAL=/**/ -DNDEBUG
PKG_LIBS=-lxml2 -lz -lpthread -licucore -lm -lgmp $(FLIBS) $(LAPACK_LIBS) $(BLAS_LIBS)
all: $(SHLIB)
并且没有其他 Makefile。总之,如何将 C 代码放入依赖于另一个 C 库的 R 包中,以及如何编写相应的 Makevars(或 Makefile)来合并 C 函数?
此处发布了一个较旧的问题,但似乎只是链接以帮助编写您自己的不依赖于任何东西的 C 代码。