zoukankan      html  css  js  c++  java
  • 转:在VS2010下编译、调试和生成mex文件

      最近帮人调了一个程序,是网上公开的代码,利用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

  • 相关阅读:
    java实现排列序数
    java实现猜算式
    java实现猜算式
    java实现猜算式
    java实现猜算式
    java实现猜算式
    java实现算年龄
    Delphi 项目失败的总结
    使用EurekaLog时遇到的问题
    KmdKit4D 0.01正式版发布了(0.02版已放出)(Delphi做驱动)
  • 原文地址:https://www.cnblogs.com/Key-Ky/p/4433218.html
Copyright © 2011-2022 走看看