我需要编译一个用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文件时,出现此错误?