matlab で dll fortran を使用する際に問題があります。fortran でビルドされた dll を matlab で使用できませんでした。matlab で「loadlibrary」命令を使用していますが、エラーはヘッダー ファイルに関連しています。ヘッダファイルとは?? matlab で dll fortran をロードして呼び出すための詳細情報を教えてください。
3 に答える
dll ファイルを直接使用するのではなく、Matlab の MEX 機能を使用して再構築することをお勧めします。はい、mex ファイルは dll であり、Matlab の外部で dll をビルドして正常に使用することができます。MEX を使用するのは、私が推測するような初心者にとってははるかに簡単です。より簡単な方法の 1 つは、mex ファイルをビルドする場合、システムは、ご存知のように、Fortran プログラマーにとってかなり異質な概念であるヘッダー ファイルを要求しないことです。MEX によって作業が楽になるもう 1 つの方法は、dll によって公開されている関数を、loadlibrary を使用せずに、Matlab のコマンド ラインから直接呼び出すことができることです。
MEX ファイルに関する Matlab のドキュメントを調べて、この方法で Fortran を統合する方法に特に注意してください。
呼び出す Fortran DLL 内の名前付き関数のそれぞれを定義するヘッダー ファイルを提供する必要があります。たとえばsum
、次のような 2 つの倍精度変数を合計するという名前の関数が DLL に含まれているとします。
function sum(a,b) result(sum)
real(kind=2), intent(in) :: a, b
real(kind=2) :: sum
sum = a + b
end function
次に、ヘッダーに次のようなものを含める必要があります。
double sum(double*a, double*b);
ただし、Fortran コンパイラに固有のマングリングという名前でこれを装飾することを忘れないでください。たとえば、sum
という名前のモジュールfoo
にあり、gfortran でコンパイルした場合、次のようなものが必要になります。
double __foo_MOD_sum(double*a, double*b);
他にもたくさんのケースがありますが、それがその要点です。
MATLAB で使用しているヘッダー ファイルとコマンド ラインを確認しないと、ここであまり役に立ちません。loadlibrary に 2 つの引数を渡すように要求する MATLAB のドキュメントを参照することができます。2 つ目は、関数シグネチャを含むヘッダー ファイルです。この2番目の引数を提供していないと思います。