0

我需要用 Matlab 2009 编译一个用 C++(VS 2008)编写的 mex 文件。如果我直接用 VS 2008 编译,似乎 Matlab 不兼容,错误是:

//无效的 MEX 文件

所以我尝试使用MEX函数直接与Matlab一起使用。在“mex -setup”中,我选择了

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

用 Matlab 编译,但它只编译 C 而不是 C++,我的代码是 C++。然后我选择了

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

用 Matlab 的 VS 2008 编译。对于一个简单的测试 C++ 文件,它可以工作。mex 文件很完美。然后我添加了一些头文件和一个函数来调用其中一个头文件中的类。我在我的项目中添加了“Aria”头文件,出现了上述错误。

//您可以在其中找到头文件的 Aria 网站:(http://robots.mobilerobots.com/wiki/ARIA)

头文件和主程序在同一目录下,所有的lib文件都在VC++工程中定义。在“其他库目录”中,我再次添加了它们的路径。当我通过 VC++ 构建我的项目时,没有错误。但是当我尝试使用 Matlab 中的 MEX 时,会发生此错误。(C++ 文件的名称是“test”)

// Microsoft (R) 增量链接器版本 9.00.21022.08

版权所有 (C) 微软公司。版权所有。

...

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 unresolved externals

C:\PROGRA~1\MATLAB\R2009A\BIN\MEX.PL:错误:“test.mexw32”的链接失败。

???在 218 处使用 ==> mex 时出错,无法成功完成。//

为了测试该项目,我在其中一个头文件中编写了一个小类,并在 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 回答