0

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

4

1 に答える 1

0

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

//mex name.cpp name.h name.lib

ここでは、WinMM.Lib、WSock32.Lib、AdvAPI32.Lib です。

于 2012-02-06T13:53:58.630 に答える