【发布时间】:2012-09-08 04:59:37
【问题描述】:
我有一些使用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 函数?
here 发布了一个较早的问题,但似乎只是链接到帮助编写您自己的不依赖于任何东西的 C 代码。
【问题讨论】:
-
我认为目前这不可能以干净和便携的方式实现。
-
这里只想提一下,复制整个 igraph 源代码也不是那么容易,因为它依赖于一些外部库,例如libxml2,GMP。我实际上与原始海报处于相同的情况,使用 GLPK 库/包。 igraph 现在包含 GLPK 的副本。