16

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 ライブラリに依存する R パッケージに C コードを配置するにはどうすればよいでしょうか。また、対応する Makevar (または Makefile) を記述して C 関数を組み込むにはどうすればよいでしょうか。

古い質問がここに投稿されましたが、何にも依存しない独自の C コードを作成するのに役立つようにリンクされているようです。

4

2 に答える 2

6

ここでいくつかの質問があります:

  1. パッケージ 'foo' はパッケージ 'bar' に確実にリンクできますか? 「他のパッケージへのリンク」に関するセクション 5.8 の冒頭にある「R 拡張機能の作成」は、Gabor が以前のコメントで示唆したように、「いいえ、一般的ではない」と述べています。

  2. 別のライブラリに依存するパッケージをビルドするために、C ソース コードをパッケージに入れることはできますか: はい、もちろん、CRAN の多くのパッケージで実行できます。たとえば、GSL、JPEG/TIFF グラフィック ライブラリ、XML などに依存するパッケージの例を選んでください。これらのソースを調べることができます。これは簡単なことではありませんが、これらのパッケージ、R 拡張機能の記述のドキュメント、および関連する質問に対するその他の回答をここで学習すると、そこにたどり着くはずです。

于 2012-09-08T13:44:51.930 に答える