使用 C++ 编译 mex 文件通过matlab:无法访问头文件
我需要用Matlab 2009编译一个用C++(VS 2008)编写的mex文件。如果我直接用VS 2008编译,Matlab似乎不兼容,错误是:
//无效的 MEX 文件
所以我尝试直接使用MEX函数与Matlab进行编译。在“mex -setup”中我选择了
//C:\PROGRA~1\MATLAB\R2009a\sys\lcc 中的 Lcc-win32 C 2.4.1
用Matlab编译,但它只编译C而不编译C++,而我的代码是C++。 然后我选择了
//Microsoft Visual C++ 2008 SP1 位于 C:\Programme\Microsoft Visual Studio 9.0
使用 VS 2008 从 Matlab 进行编译。对于一个简单的测试 C++ 文件来说它是有效的。 mex 文件非常完美。然后我添加了一些头文件和一个函数来调用其中一个头文件中的类。我将“Aria”头文件添加到我的项目中,并出现上述错误。
//可以在其中找到头文件的 Aria 网站:(http://robots.mobilerobots.com/wiki/ARIA)
头文件与主程序位于同一目录中,所有lib文件都在VC++项目中定义。在“其他库目录”中,我再次添加了它们的路径。当我通过VC++构建项目时,没有错误。但是当我尝试使用 Matlab 中的 MEX 时,会发生此错误。 (C++文件的名称是“test”)
// Microsoft (R) 增量链接器版本 9.00.21022.08
版权所有 (C) Microsoft Corporation。版权所有。
...
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 未解析的外部
C:\PROGRA~1\MATLAB\R2009A\BIN\MEX.PL:错误:“test.mexw32”链接失败。
???使用 ==> 时出错墨西哥 218 无法成功完成。 //
为了测试该项目,我在其中一个头文件中编写了一个小类,并在 C++ 文件中使用了该类,它成功了!我不知道为什么其他课程不起作用。它们相互链接,大约有 140 个 .h 文件。
有谁知道为什么会发生这种情况? 为什么我在VC++中构建、发布和调试项目时没有错误,但当我尝试用Matlab编译MEX文件时,却出现此错误?
I need to compile a mex file which is written in C++ (VS 2008) with Matlab 2009. If I compile with VS 2008 directly, it seems Matlab is not compatible and the error is:
//Invalid MEX-file
So I tried to comile with Matlab directly using MEX function. In "mex -setup" I chose
//Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2009a\sys\lcc
to compile with Matlab, but it only compile C and not C++ and my codes are in C++.
Then I chose
//Microsoft Visual C++ 2008 SP1 in C:\Programme\Microsoft Visual Studio 9.0
to compile with VS 2008 from Matlab. For a simple test C++ file it worked. The mex file was perfect. Then I added some header files and a function to call a class in one of the header files. I added "Aria" header files to my project and the above error comes.
//Aria website where you can find header files: (http://robots.mobilerobots.com/wiki/ARIA)
Header files are in the same directory as main program, all the lib files are defined in VC++ project. In "Additional library directories" I added their path again. When I build my project through VC++, there is no error. But when I try to use MEX from Matlab, this error happens. (the name of C++ file is "test")
//
Microsoft (R) Incremental Linker Version 9.00.21022.08Copyright (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)" (_imp_?init@Aria@@SAXW4SigHandleMethod@1@_N1@Z) referenced in function _main
test.mexw32 : fatal error LNK1120: 1 unresolved externalsC:\PROGRA~1\MATLAB\R2009A\BIN\MEX.PL: Error: Link of 'test.mexw32' failed.
??? Error using ==> mex at 218
Unable to complete successfully.
//
To test the project, I wrote a small class in one of that header files and used that class in C++ file, and it worked! I do not know why other classes do not work. They are linked to each other and they are about 140 .h files.
Has anyone any idea why this happens?
Why there is no error when I build, release and debug project in the VC++, but when I try to compile MEX file with Matlab, this error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
需要编译所有头文件和必要的库。
//mex name.cpp name.h name.lib
这里是WinMM.Lib、WSock32.Lib和AdvAPI32.Lib。
All the header files and necessary libs needs to be compiled.
//mex name.cpp name.h name.lib
Here, WinMM.Lib, WSock32.Lib and AdvAPI32.Lib.