2012-02-02 18 views
0

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ファイルをコンパイルしようとすると、このエラーは発生しますか?

答えて

0

すべてのヘッダーファイルと必要なライブラリをコンパイルする必要があります。ここで

// MEX name.cpp名.h name.lib

、WINMM.LIB、WSOCK32.LIBとAdvAPI32.Lib。

関連する問題