2017-10-24 13 views
1

Rパッケージに含めるコンパイル済みのCライブラリ(lib.dll)を用意しています。パッケージは.Call経由でlib.dllの機能にアクセスできます。私はパッケージに他のCソースコードがなく、lib.dllのソースコードをパッケージと共にビルドすることはオプションではありません。Rパッケージにコンパイルされた共有Cライブラリを含み、Rラッパー関数から関数を呼び出す

パッケージにlib.dllを含める正式な方法は何ですか?私がCRANにパッケージを提出するつもりはないので、コンパイルされたコードに関するCRANのルールはそれほど重要ではありませんが、最終的には他のオンラインソースでパッケージを利用できるようにしたいので、いつも手動でパッケージのインストールは最適ではありません。私はこれを行う "通常の"方法があるように感じるが、私はそれを動作させるように見えることはできません。

私はSOFARしようとしているもの:

  • は、srcフォルダにDLLを入れて、名前空間ファイルにuseDynLib(LIB)を追加するが、これはパッケージのビルド中に問題が発生し

  • より良い解決策がないため、すでにビルドされたパッケージにdllを追加しようとしましたが、.dll()を使用してdllを動的にロードする.onLoadと.onAttach関数(zzz.R)を追加しました。これは最初はうまくいくと思われ、pakcageをロードした後に.Call()を使ってlib.dllの関数に直接アクセスすることができましたが、Rラッパー関数を使ってアクセスしようとすると、DLLの関数が名前空間にない;私は私の理解は、ケース誰かにパッケージ

+1

"lib.dllのソースコードをパッケージと共にビルドすることはオプションではありません" - 好奇心。どうして?その場合、これは(否定的に)配布可能性に影響するためです。 –

答えて

0

と同じ質問を持ってコンパイルすることに-のdllのために意味される名前空間ファイルにuseDynLib()の行を追加して、ここで途方に暮れてよ、答え

"instサブディレクトリの内容は、インストールディレクトリに再帰的にコピーされます。instのサブディレクトリはRで使用されるものと干渉しないはずです(現在、R 、データ、デモ、エグゼクティブ、libs、man、help、html、Meta、そして以前のバージョンではlatexを使っていました。 dllやその他のファイルは単に/ instに置くことができ、インストールされたパッケージに格納されます。

関連する問題