14

インターネット上にはいくつかの解決策が存在しますが、現在直面している問題に適した解決策は見つかりませんでした (ただし、私は単に愚かすぎるかもしれません)。

Makefile によってコンパイルされた共有オブジェクトを多用する R パッケージを構築しようとしています (はい、悪い習慣ですが、Makevars ファイルは、C と Fortran コードを 1 つの共有オブジェクトにコンパイルするように指示することはできません)。 ) パッケージのsrcディレクトリ内のコードから。その .so をどこにコンパイルしても ( src,libsおよびパッケージのベース フォルダーを試しました)、どのように名前を付けても (上記のソリューションの 1 つでは、含まれているパッケージのように名前を付ける必要があると述べられています)、次のようにR CMD check終了します。

** testing if installed package can be loaded
Error in library.dynam(lib, package, package.lib) : 
shared object ‘SoMNibEN.R.so’ not found

useDynLib(SoMNibEN.R)私のNAMESPACEファイルの指示によるものです(SoMNibEN.R私のパッケージの名前はどこにありますが、元の名前でも機能しませんでした)

私の仮定は、そのuseDynLib()コマンドを間違って使用しているか、Makefile で何か間違ったことをしているということです (ただし、コンパイルはうまく機能し、共有オブジェクトはプロジェクト フォルダーに作成されますが、それがコピーされるかどうかはわかりません)。パッケージのインストール ディレクトリに正常に追加されます)。

だから、私がここで間違っているかもしれないことを誰かが知っているなら、私に知らせてください!

4

1 に答える 1

10

パッケージの名前は、 R によって構築された共有オブジェクトの名前であるため、引数として必要ですuseDynLib("chron")。引用符はオプションです (などの場合と同様library())。

また、Makefile を使用せsrc/、単に C ファイルと Fortran ファイルをディレクトリにドロップすることをお勧めします。R は通常、何をすべきかを理解するのに十分賢いです。etc スイッチが必要な場合は-I、そこに設定できます。

最後に、CRAN を使用します。コンパイルされたソースを含む何百ものパッケージがあり、いくつかはあなたの質問と構造が似ているはずです。

于 2012-10-19T18:02:11.857 に答える