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

3. 配置项目属性。  

打开项目属性配置页,C++ -> 附加包含目录 加入MATLAB安装目录下的 \extern\include 路径。

链接器 -> 附加库目录 加入MATLAB的 \extern\lib\win32\microsoft 路径。

链接器 -> 输入 -> 附加依赖项 输入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)\MATLAB\R2012a\bin\win32\MATLAB.exe”;在“工作目录”中添加mex1.mexw32文件所在的目录,我的目录是:“C:\Users\ky\Documents\visual studio 2010\Projects\mex1\Debug\”。

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

转:在VS2010下编译、调试和生成mex文件的更多相关文章

  1. 在VS2010下编译和使用tesseract_ocr识别验证码

    对于自动识别验证码,使用trsseract是个不错的选择,有兴趣的的朋友可以试试. 编译tesseract 官网提供了vs2008的编译说明和工程,但在vs2010下的编译时基本相同的,因此我使用的方 ...

  2. VS2010 下编译 cocos2d-x-2.1.4

    在VS2010 下编译 cocos2d-x-2.1.4   首先感谢 cocos2d-x 团队为我们做出这么好的跨平台框架,让我们这些码农省了很多时间,事半功倍. 里沃特最近在编译 win32 版本的 ...

  3. windows下编译调试nginx

    typora-copy-images-to: image windows下编译调试nginx linux使用gdb跟踪代码效率不高,在通过跟踪代码进行源码分析,与定位复杂逻辑问题时,如果有一个简单易用 ...

  4. 在vs2010下编译boost

    1. 解压缩后,运行bootstrap.bat批处理文件,得到bjam.exe; 2. 在vs2010下编译boost boost最新版本已经支持vs2010,然而直接下载编译会发现一堆bug: 首先 ...

  5. Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式

      相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...

  6. Android 自动编译、打包生成apk文件 4 - 多渠道批量打包

    相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式 > < ...

  7. 【i.MX6UL/i.MX6ULL开发常见问题】单独编译内核,uboot生成很多文件,具体用哪一个?

    [i.MX6UL/i.MX6ULL开发常见问题]2.3单独编译内核,uboot生成很多文件,具体用哪一个? 答:内核编译出来的文件是~/MYiR-imx-Linux/arch/arm/boot/目录下 ...

  8. eclipse下Android无法自动生成apk文件怎么办?

    eclipse下Android无法自动生成apk文件怎么办? 现象:创建android工程后,通过手动build/clean或自动build均无法在bin文件夹下生成.apk文件 解决方法:进入win ...

  9. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法

    在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了“错误: 无法访问android.app.Activity 找不到android.app.Activity ...

随机推荐

  1. keypress,keydown,keyup,charCode,keyCode兼容性问题

    keypress对应的是字符编码,如“ABC”,“123”之类,有大小写之分(有兼容性问题) keydown,keyup对应的是键盘的键码,无大小写之分,每个键盘都有一个键码(无兼容性问题) 使用ke ...

  2. getContentResolver()内容解析者查询联系人、插入联系人

    首先,我们需要知道的两个Uri: 1.Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//查到 ...

  3. vijos-1447 开关灯泡-大整数开方算法

    描述 一个房间里有n盏灯泡,一开始都是熄着的,有1到n个时刻,每个时刻i,我们会将i的倍数的灯泡改变状态(即原本开着的现将它熄灭,原本熄灭的现将它点亮),问最后有多少盏灯泡是亮着的. 提示 范围:40 ...

  4. Linux 使用 iptables屏蔽IP段

    netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加.编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则.这些规则存储在专用的信息包过滤表中 ...

  5. myeclipse 连接svn服务器验证位置时发生错误 404 forbidden

    来源于:https://my.oschina.net/softwarechina/blog/220300 网上有文章说是C:\Users\thinkpad\AppData\Roaming\Subver ...

  6. 【HDU 3938】Portal (并查集+离线)

    http://acm.hdu.edu.cn/showproblem.php?pid=3938 两点之间建立传送门需要的能量为他们之间所有路径里最小的T,一条路径的T为该路径上最长的边的长度.现在 Q ...

  7. Paths(转载)

    Paths中的几个重要元素 Points void CGContextMoveToPoint ( CGContextRef c, CGFloat x, CGFloat y ); 指定一个点成为curr ...

  8. OPENGL若干重要基础概念

    投影:3D数据“压平”到2D的计算机屏幕上,即将真正的三维物体显示到二维屏幕上,这种3D压平到2D的过程称为投影. 投影类型:正投影,透视投影 正投影:垂直于投影平面的平行投影(不垂直的投影平面的平行 ...

  9. Scala 递归学习的例子

    为了学习Spark,我开始了学习Scala.加油! 递归的一个题目: 代码: // Why x is Float, but when we use 3.0 for example, it return ...

  10. AS技巧合集「调试技巧篇」

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=254726&extra=page%3D2%26filter%3Dautho ...