0

Rパッケージをビルドしていて、ビルドプロセスの一部としてOSX用のjniライブラリ(と呼ばれるmyPackage.jnilib)をビルドしてから、Rの自動インストールメカニズムでパッケージのlibsディレクトリ内に配置する必要があります。

問題は、Rのデフォルトは、と呼ばれるオブジェクトを作成しようとすることmyPackage.soです。これをカスタマイズできるようにしたいのですが、方法がわかりません。

Makevars(ここで説明)の偽の「すべて」のターゲットを使用してRのメカニズムを破壊し、ファイルをinstパッケージのディレクトリにコピーすることで、途中で取得できます。これは私自身のローカルでの使用には問題ありませんが、ユニバーサルバイナリを構築しようとすると頭痛の種になり、移植性があまり高くありません。現在、CRANのパッケージを準備しているため、この方法は機能しない可能性があります。

私は2つの潜在的な解決策を見ることができますが、どちらもまだ機能していません

  1. インストール中に、ライブラリをパッケージのlibsディレクトリに手動でコピーします。このディレクトリはその場で作成されるので、Makevarsまたはconfigureスクリプト内からどのようにそれが何であるかを知ることができますか

  2. 最善の解決策:R CMD SHLIBに出力ファイルの名前を伝えて、Rの通常のパッケージメカニズムを使用し、ファイルを正しいディレクトリにコピーできるようにします。

4

1 に答える 1

0

他の誰かがこの問題に遭遇した場合に備えて、私はここに自分自身の回避策を投稿しています。

Makevarsでターゲットを定義し、ライブラリを直接コピーします(つまり、回答1)。変数R_LIBRARY_DIRは、パッケージがビルドされている一時的な場所を提供します。

私のMakevarsは今このように見えます

OBJECTS = 

LIBSINSTDIR=$(R_LIBRARY_DIR)/myPackage/libs/

#ARCHFLAG is set in the configure script to i386 or ppc as appropriate
JNIINSTDIR=$(LIBSINSTDIR)/@ARCHFLAG@/

.PHONY: all

all: $(SHLIB) jnilib 

jnilib: object1.o object2.o
   $(CXX) -bundle $(JAVA_LIBS) $(JAVA_CPPFLAGS) -o libmyPackage.jnilib object1.o object2.o
   mkdir -p $(JNIINSTDIR)
   cp libmyPackage.jnilib $(JNIINSTDIR)
于 2009-09-04T07:21:28.803 に答える