Matlab 2009でC++(VS 2008)で書かれたmexファイルをコンパイルする必要があります。もしVS 2008で直接コンパイルするとMatlabは互換性がないようですエラーは次のとおりです。matlab:headerファイルからC++でmexファイルをコンパイルする
//Invalid MEX-file
私はMEX関数を使用して直接Matlabにコミットしようとしました。 「MEX -setup」で、私は、MATLABでコンパイルするが、それは唯一のC++と私のコードはC++であるCをコンパイルしていないために
//Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2009a\sys\lcc
を選びました。 その後、私は
//Microsoft Visual C++ 2008 SP1 in C:\Programme\Microsoft Visual Studio 9.0
をMatlabからVS 2008でコンパイルすることにしました。シンプルなテスト用のC++ファイルのために働いていました。 mexファイルは完璧でした。次に、ヘッダーファイルと、ヘッダーファイルの1つでクラスを呼び出す関数を追加しました。私は私のプロジェクトに "Aria"ヘッダーファイルを追加し、上記のエラーが発生します。
//Aria website where you can find header files: (http://robots.mobilerobots.com/wiki/ARIA)
ヘッダーファイルはメインプログラムと同じディレクトリにあり、すべてのlibファイルはVC++プロジェクトで定義されています。 「追加ライブラリディレクトリ」には、パスをもう一度追加しました。 VC++を使用してプロジェクトをビルドすると、エラーは発生しません。しかし、MatlabからMEXを使用しようとすると、このエラーが発生します。 (C++ファイルの名前は、「テスト」である)
// Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
...
test.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static void _cdecl Aria::init(enum Aria::SigHandleMethod,bool,bool)" ([email protected]@@[email protected]@[email protected]) referenced in function _main test.mexw32 : fatal error LNK1120: 1 unresolved externals
C:\PROGRA~1\MATLAB\R2009A\BIN\MEX.PL: Error: Link of 'test.mexw32' failed.
??? Error using ==> mex at 218 Unable to complete successfully. //
プロジェクトをテストするために、私はそのヘッダファイルのいずれかに小さなクラスを書いて、C++ファイルにそのクラスを使用し、それが働きました!なぜ他のクラスがうまくいかないのか分かりません。それらはお互いにリンクされており、約140の.hファイルです。
なぜこのようなことが起こったのか誰にも考えていますか? VC++でプロジェクトをビルド、リリース、デバッグするときにエラーが発生するのはなぜですか?ただし、MatlabでMEXファイルをコンパイルしようとすると、このエラーは発生しますか?