2012-02-02 72 views
0

我需要編譯一個用Matlab 2009編寫的C++(VS 2008)mex文件。如果我直接用VS 2008進行編譯,似乎Matlab不兼容和錯誤是:用C++編譯mex文件通過matlab:頭文件不可訪問

//Invalid MEX-file

所以我試圖用Matlab直接使用MEX功能comile。在「MEX -setup」我選擇

//Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2009a\sys\lcc

用Matlab進行編譯,但它只能編譯C,而不是C++和我的代碼是C++。 然後我選擇了

//Microsoft Visual C++ 2008 SP1 in C:\Programme\Microsoft Visual Studio 9.0

使用VS 2008從Matlab進行編譯。對於一個簡單的測試C++文件它工作。 mex文件是完美的。然後我添加了一些頭文件和一個函數來在一個頭文件中調用一個類。我在我的項目中添加了「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個小時文件。

有沒有人知道爲什麼會發生這種情況? 爲什麼當我在VC++中構建,發佈和調試項目時沒有錯誤,但是當我嘗試使用Matlab編譯MEX文件時,出現此錯誤?

回答

0

需要編譯所有頭文件和必要的庫文件。

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

這裏,WINMM.LIB,WSock32.Lib和AdvAPI32.Lib。