2012-02-02 177 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。