matlab2020a下调试64位mex文件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

matlab中可以调用由C语言生成的mexw64文件,但是无法调试。楼主借鉴了很多人的博客,并自己在Matlab 2020a和Visual Studio 2022上进行了尝试,可以确保调试的正常进行。


提示:以下是本篇文章正文内容,下面案例可供参考

一、mexw64是什么

mexw64文件是matlab和c混编用到的文件,通过mex命令将c文件转换成mexw64供matlab调用(c文件中需要有mexFunction),对于其调用可以通过查看原c文件对于输入输出是怎么定义的,然后像正常函数一样调用就行。但是matlab里面无法单步调试mex函数,故需转到VS上面调试,这里采用VS2022.

二、使用步骤

1.安装VS2022,选择windows通用平台

  

2.VS下创建C++控制台项目

3.添加新项,命名为testadd.c

#include "mex.h" // 使用MEX文件必须包含的头文件

// 执行具体工作的C函数

double add(double x, double y)

{

    return x + y;

}

// MEX文件接口函数

void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])

{

    double* a;
    double* b;

    double c, d;



    plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
    plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);

    a = mxGetPr(plhs[0]);
    b = mxGetPr(plhs[1]);

    c = *(mxGetPr(prhs[0]));

    d = *(mxGetPr(prhs[1]));



    *a = add(c, d);
    *b = add(c, d) + 1;

}

该处使用的url网络请求的数据。


 4.配置外部包含目录,引入mex.h

5.回到matlab,在testadd.c同级目录下生成调用的m文件

clc;
[a,b]=testadd(2.0,3.0);

 6.在matlab的运行窗口编译生成mex64文件

mex -g testadd.c

如果没有编译错误,得到testadd.mexw64。

注意:如果出现没有编译器的提示,在matlab的附加功能-获取附加功能中搜索MinGW-w64默认安装即可。

 7.VS中调试-附加到进程中连接matlab

 8.在VS中设置断点,在matlab中运行m文件,就会跳到VS的断点,可以单步调试

 注意如果第二次重新调试,需要在matlab的命令窗口清空旧的mexw64文件

clear testadd.mexw64

总结

调试成功后把mexw64文件copy到任意matlab工程里,就可以像函数调用一样任意使用。

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab MEX文件是一种可以在Matlab环境中调用的C语言或Fortran等衍生程序。它们实际上是带有输出函数mexFunction的动态链接库(dll)文件MEX文件提供了与其他语言编写的函数的接口,使得在Matlab中可以像调用内置函数一样调用这些函数,从而实现代码的重用,同时提高数据处理的效率。需要注意的是,Matlab的指标从1开始,而C语言的指标从0开始。举个例子,函数a=屏幕快照(b)是一个使用MEX文件实现的用于捕捉屏幕的函数,其中b是双精度数据,当b为0时,捕捉的屏幕不包括Matlab窗口,而当b不为0时,捕捉的屏幕包括Matlab窗口。编译使用mex命令将C语言代码编译为MEX文件,然后就可以在Matlab中调用该函数进行屏幕截图。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Matlab中的mex文件](https://blog.csdn.net/weixin_52135350/article/details/127351126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [捕捉屏幕:matlab mex 文件捕捉屏幕-matlab开发](https://download.csdn.net/download/weixin_38689824/19318383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值