【问题标题】:Compiling mex files with C++ through matlab: header files are not accessible通过matlab用C++编译mex文件:头文件不可访问
【发布时间】:2012-02-25 02:57:17
【问题描述】:

我需要用 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++。 然后我选择了

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

使用 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) Microsoft Corporation。版权所有。

...

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) 在函数 _main 中引用 test.mexw32 : 致命错误 LNK1120: 1 unresolved externals

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

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

为了测试该项目,我在其中一个头文件中编写了一个小类,并在 C++ 文件中使用了该类,它成功了!我不知道为什么其他课程不起作用。它们相互链接,大约有 140 个 .h 文件。

有人知道为什么会这样吗? 为什么我在VC++中build、release、debug项目都没有报错,但是用Matlab编译MEX文件时出现这个报错?

【问题讨论】:

    标签: visual-c++ linker-errors header-files mex lnk2019


    【解决方案1】:

    所有头文件和必要的库都需要编译。

    //mex name.cpp name.h name.lib

    这里是 WinMM.Lib、WSock32.Lib 和 AdvAPI32.Lib。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多