我需要編譯一個用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文件時,出現此錯誤?