打印

vc和matlab混合调试mex文件

[复制链接]
537|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Roses|  楼主 | 2017-11-16 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
vc和matlab混合调试mex文件


1.调试环境:vs2008,matlab2011a。
        2.步骤:
        (1)在matlab中通过 ”mex -setup“通过命令为matlab指定编译器,针对本人环境就是vs2008。这里如果出现找不到编译器的情况,可在”Would you like mex to locate installed compilers [y]/n?“选择n,然后从出现的编译环境中选择。安装顺序应是先vs,后matlab。
        (2)创建MFC DLL工程,工程名MexDemo,按默认的选项就可以,不用作任何选择。
        (3)MexDemo属性页,在链接器-输出文件中,把输出文件改为mexw32,64位的改为mexw64。

        (3)工程创建完后,把所有有关的文件添加到工程中。文件内容包含"mexFunction()"函数的xxxmex.c文件,和这个.c文件中include的所有.h和.c文件。

        (4)把所有的.c文件改名为.cpp,并在内容前面加入#include stdafx.h。
        (5)打开MexDemo.def文件,加入”mexFunction“,格式如下:

        (6)编译整个工程,调试工程,出现如下窗口时,点取消即可,这时在工程的debug文件下就会生成MexDemo.mexw32文件(工程有两个debug文件夹,生成在外面的。当然也可设置生成mexw32文件的位置)实际上也是dll文件,稍后matlab就是调用这个文件。

        (7)打开matlab,不要打开多个matlab应用程序。
        (8)在MexDemo工程中,选择工具-附加到进程,在打开的窗口选择Matlab,将在mexFunction函数中设置断点。如果没有先打开matlab,这步会找不到Matlab.exe项。设置的断点如果显示黄色感叹号,不能触及,不要理会,直接执行下步。


        (9)在matlab中将断点设置在要调用mex文件的语句上,比如要执行的函数名是tmp(a1,a2),然后单击"Current Folder"目录选择框,将当前的工作目录转换到MexDemo工程的debug目录下,其中包含MexDemo.mexw32文件。

        (10)在(9)中有可能会遇到个问题,就是MexDemo工程生成的MexDemo.mexw32文件的文件名与matlab要调用的mex文件的文件名不相同,出现无法执行的情况,可这样解决。在MexDemo的debug目录下,创建一个.m的文件tmp.m,在tmp.m文件中,加入一个函数,名称为MexDemo(a1,a2)。总的来说就是要让matlab执行mexw32文件,也可提前将工程名设置成函数的名字(这个没试过)。另外大家也可将mexw32 文件的生成目录设成matlab的当前目录相同,就可避免转换目录。
        (11)点继续执行,MexDemo中mexFunction函数中的断点就可触发。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

709

主题

1023

帖子

7

粉丝