4


0

RのDLLとインターフェイスする方法は?

Matlabからdll拡張機能を作成しました。 次に、Rでそのdllを読み取ります。

`dyn.load()`を使用しましたが、機能しません。

提案をお願いできますか?

3 Answer


2


ソースコードはどの言語で書かれていましたか?

問題はコンパイラーの混合です。 Matlab dllはおそらくVisual Studioによって構築されたものです。 また、関数識別子が破損するため、異なるコンパイラ間でC ++コードを混在させることはできません。 いくつかの作業を行うと、Cオブジェクトコードを混在させることができます。 MinGWサイトにはいくつかのFAQがあります。


1


@Marioの答えの下のコメントスレッドでの議論に基づいて、問題の診断に役立てるために、行った比較(「R CMD SHLIB」dllとMatlab dll)を試すことをお勧めします。 結果に基づいて、dllの呼び出し構文がCでどのようになるかを把握し、その構文を使用するが、R CMD SHLIB可能の小さなCラッパーを作成する必要があると思います…​ `R CMD SHLIB --help`は、コマンドラインにリンカーオプションを含めることができると言っています(つまり、 Matlab呼び出し可能dllをR呼び出し可能dllにリンクしていることを確認してください)、しかし、正確な構文はわかりません。 R拡張機能マニュアルの関連セクションを少し勉強するのがおそらく役立つでしょう。


0


さらに情報が必要です。 通常の方法は次のとおりです。

dyn.load( "/ path / to / library");

いくつかのポインタ:

  • ライブラリのアーキテクチャが正しいことを確認してください(例: 「x86_64」対「i386」対「armv7」)

  • Windows '.dll’をロードしようとしていないことを確認してください UNIXベースのマシン( '.so'、 '。dylib')