Matlab2009を使用してC++(VS 2008)で記述されたmexファイルをコンパイルする必要があります。VS2008を直接コンパイルすると、Matlabに互換性がないようで、エラーは次のとおりです。
//無効なMEXファイル
そこで、MEX関数を使用してMatlabと直接連携してみました。「mex-setup」で私は
// Lcc-win32 C 2.4.1 in C:\ PROGRA〜1 \ MATLAB \ R2009a \ sys \ lcc
Matlabでコンパイルしますが、Cのみをコンパイルし、C ++はコンパイルせず、私のコードはC++です。それから私は選びました
// C:\ Programme \ Microsoft VisualStudio9.0のMicrosoftVisualC ++ 2008 SP1
MatlabからVS2008でコンパイルします。簡単なテストC++ファイルの場合は機能しました。mexファイルは完璧でした。次に、いくつかのヘッダーファイルと、ヘッダーファイルの1つでクラスを呼び出す関数を追加しました。プロジェクトに「Aria」ヘッダーファイルを追加しましたが、上記のエラーが発生します。
//ヘッダーファイルを見つけることができるAriaのWebサイト:(http://robots.mobilerobots.com/wiki/ARIA)
ヘッダーファイルはメインプログラムと同じディレクトリにあり、すべてのlibファイルはVC++プロジェクトで定義されています。「追加のライブラリディレクトリ」で、パスを再度追加しました。VC ++を使用してプロジェクトをビルドしても、エラーは発生しません。しかし、MatlabからMEXを使用しようとすると、このエラーが発生します。(C ++ファイルの名前は「test」です)
// Microsoft(R)インクリメンタルリンカーバージョン9.00.21022.08
Copyright(C)MicrosoftCorporation。全著作権所有。
..。
test.obj:エラーLNK2019:未解決の外部シンボル "__declspec(dllimport)public:static void _ cdecl Aria :: init(enum Aria :: SigHandleMethod、bool、bool)"( _imp_?init @ Aria @@ SAXW4SigHandleMethod @ 1 @ _N1 @Z)関数_main test.mexw32で参照:致命的なエラーLNK1120:1つの未解決の外部
C:\ PROGRA〜1 \ MATLAB \ R2009A \ BIN \ MEX.PL:エラー:「test.mexw32」のリンクに失敗しました。
??? ==> mexat218の使用中にエラーが発生しました。正常に完了できません。//
プロジェクトをテストするために、そのヘッダーファイルの1つに小さなクラスを記述し、そのクラスをC ++ファイルで使用しましたが、機能しました。他のクラスが機能しない理由がわかりません。それらは互いにリンクされており、約140の.hファイルです。
なぜこれが起こるのか誰かが知っていますか?VC ++でプロジェクトをビルド、リリース、デバッグしてもエラーが発生しないのはなぜですか?MatlabでMEXファイルをコンパイルしようとすると、このエラーが発生しますか?