Mex程序实现了matlab调用c++的混合编程,但matlab并没有提供mex程序的调试平台(也有可能是我没有找到,欢迎大家补充),使得程序的调试很麻烦。
参考的文章链接如下:
Mex文件在VS2010中调试方法
MEX文件的调试
Matlab的版本是2012a, VS2010,机器是64位的。
编写mex文件
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mexPrintf("hello matlab in C/CPP.\n");
}
在VS2010中创建win32 dll 空项目(第二幅图中应该选dll)
文件添加到源码目录
修改各种配置
这一步是关键,配置主要分三个部分,一个部分是引用部分的配置,第二个是库的配置,最后是输出文件的配置。引用配置(include):
配置设定位置在解决方案属性页上的“c/c++”标签栏中设置,在“附加包含目录”中添加“matlab安装位置/…/extern/include”(include文件夹下面会有一个win64的文件夹,不要选)库配置(lib):
配置设定位置在解决方案属性页上的“链接器”标签栏中设置,在“附加包含目录”中添加“matlab安装位置/…/extern/lib/win64/microsoft”(32位机器将64改为32)
在“附加依赖项”中添加文件 libmx.lib;libeng.lib;libmat.lib;libmex.lib
输出文件配置:
在链接器标签栏中将输出文件的类型改为“.mexw64”(32位的改为mexw32)
添加 hello.def 文件
新建def文件,文件内容:
LIBRARY ;"hello"
EXPORTS mexFunction
选择64位的机器
编译运行
- 连接Matlab
打开matlab,将当前文件夹设定在生成的hello.mexw64的文件夹中
在VS2010 工具->附加到进程,选择Matlab进程。
代码上加断点
在matlab中运行函数,函数挂起在断点上