最近帮人调了一个程序,是网上公开的代码,利用matlab与c++混合编程做三维模型关键点检测,发现他们可以用VS2010编译、调试、生成mexw32文件,因此觉得之前在Matlab上利用mex命令真是弱爆了(非常繁琐且对于cpp文件多的根本无法用)。所以特此转载和记录如何用VS2010+matlab2012a编译生成mexw32的方法。
1.打开VS2010,新建一个win32 项目,之后选择dll,空项目,如下图:
2.添加源文件mex1.cpp,编写mexFunction函数:
#include "mex.h" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){ mexPrintf("Hello, world! "); }
3. 配置项目属性。
打开项目属性配置页,C++ -> 附加包含目录 加入MATLAB安装目录下的 externinclude 路径。
链接器 -> 附加库目录 加入MATLAB的 externlibwin32microsoft 路径。
链接器 -> 输入 -> 附加依赖项 输入libmx.lib libeng.lib libmat.lib libmex.lib 这四个lib文件。
在项目属性中的“预处理器”中的“预处理器定义”中添加MATLAB_MEX_FILE的宏定义。
4.添加模块文件mex1.def。
并且为模块文件添加内容:
LIBRARY Test EXPORTS mexFunction
5.修改生成后缀名。
6.在启动调试时关联matlab
在项目属性---配置属性---调试---命令,中添加Matlab的启动地址:”E:Program Files (x86)MATLABR2012ainwin32MATLAB.exe”;在“工作目录”中添加mex1.mexw32文件所在的目录,我的目录是:“C:UserskyDocumentsvisual studio 2010Projectsmex1Debug”。
7.最后设定断点,启动调试,Matlab会自动启动,再在MATLAB中输入要运行的mexw32文件,例如我在matlab运行mex1(),就会自动跳转到vs2010的断点下。
注:当我设定断点,启动调试后弹出如下错误提示框:
该提示对话框是说matlab.exe没有调试信息,不能进行调试。这是正常的,因为matlab.exe是release方式编译的,其中不可能包含调试信息,我们也不需要对其进行调试。事实上也无法通过VC调试它。对此我们直接单击OK按钮将其忽略即可。
最后列出参考的几篇关键博客:
1、http://blog.sina.com.cn/s/blog_6ec1700e0100pgtd.html
2、http://www.cnblogs.com/lukylu/p/4042306.html