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

前言

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工程里,就可以像函数调用一样任意使用。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐