0

逆行列を取るなどの単純な線形演算を実行できる MATLAB で MEX ファイルを作成するのに問題があります。Visual Studio 2010 を使用して逆行列を取得し、MEX ファイルを正常に作成できたので、これら 2 つの概念をまとめることだけが問題です。MathWorks サイトから入手した MEX サンプル コードをコンパイルしようとしましたが、うまくいきませんでした。

これが私が試したことです、

  1. MathWorks から取得したファイルを .c 拡張子として保存 (名前を変更) し、MATLAB でコンパイルしようとしました。

    ライブラリ C:\Users\CIT\AppData\Local\Temp\mex_bKHjrl\templib.x およびオブジェクト C:\Users\CIT\AppData\Local\Temp\mex_bKHjrl\templib.exp eko1.obj の作成: エラー LNK2019: 未解決の外部シンボル関数 mexFunction eko1.mexw64 で参照されている dgesv: 致命的なエラー LNK1120: 1 つの未解決の外部

  2. また、.cpp ファイルとしてコンパイルしようとしましたが、memcpy 関数を認識しなかったためにエラーが発生しました。

  3. これらが機能しなかったので、LAPACK ライブラリのサブルーチン dgetrf と dgetri を使用する独自のプログラムを作成しましたが、エラーが発生しました。

    c:\users\cit\documents\matlab\f2c.h(16): エラー C2371: 'complex': 再定義; 異なる基本型 C:\Program Files\MATLAB\R2011b\extern\include\lapack.h(39) : 「complex」の宣言を参照 c:\users\cit\documents\matlab\f2c.h(17) : エラー C2371 : 'doublecomplex' : 再定義; 異なる基本型 C:\Program Files\MATLAB\R2011b\extern\include\lapack.h(40) : 'doublecomplex' の宣言を参照 eko2.cpp(29) : エラー C2057: 期待される定数式 eko2.cpp(29) :エラー C2466: 定数サイズ 0 の配列を割り当てることができません。 'ptrdiff_t *' へ 指す型は無関係です。変換には reinterpret_cast が必要です。C スタイルのキャストまたは関数スタイルのキャスト eko2.cpp(34): エラー C2664: 'dgetri': パラメーター 1 を 'integer *' から 'ptrdiff_t *' に変換できません。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です

皆さんが私に与えてくれるどんな助けも非常に高く評価されます

前もって感謝します。

4

1 に答える 1

0

試したことを確認するためのコードがないと、わかりにくいですが...他のライブラリに依存するmatlabでmexファイルを適切にコンパイルするには、コンパイルコマンドでそれらのライブラリを指定する必要があります。を使用しmex filename.c -v -l*libraryname*.libます。-l スイッチは、組み込みたいライブラリーを指定していることをコンパイラーに示します。このライブラリが見つからない場合は、コマンドにライブラリへのフル パスを含めます。少しでもお役に立てれば幸いです。この方法論を使用することは、私にとって成功しています。

于 2012-06-24T06:33:55.107 に答える