MATLAB怎么编译c语言写的所有东西

本文详细介绍了如何将C语言代码转化为可在MATLAB环境中运行的cpp文件,包括修改文件扩展名、调整主函数为mexFunction,以及处理输入输出参数的方法。同时讲解了编写.m文件来调用cpp文件,通过实例展示了输入图像和输出数组的情况,并提供了相关函数的使用示例。最后强调了在开始前需要在MATLAB中设置编译环境。
摘要由CSDN通过智能技术生成

第一步:把.c文件改成.cpp文件,C语言写的所有代码保留下来,只需在创建好的cpp文件的第一行里加入。

#include "mex.h"

就像这样:
在这里插入图片描述

第二步:把cpp里原有的主函数void main()改成这个

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

在这里插入图片描述

第三步(核心):matlab里要用对mexFunction函数就能编译C语言文件。那么这个mexFunction函数要怎么用呢?
首先要明确一点:matlab只要.m文件有运行按钮,.cpp文件可不能直接运行,就是.cpp文件没有这个东西:在这里插入图片描述
。所以,在解决了mexFunction函数的用法后,还需要自己再写一个.m文件。.m文件是需要根据自己的C语言代码的需求自己编的。即你C语言代码的样子,它会决定你mexFunction函数怎么写和.m文件怎么写。

好,上面都说了些没用的,我们继续说这个mexFunction函数要怎么用?

1.如果你的C语言的代码中是要给一些输入数据的(比如要输入一幅图篇,或是两个数字)。
如果是一幅图篇,它就是个二维数组,二维数组要这么用

inData = mxGetPr(prhs[0]);
    CAMERA_H = mxGetM(prhs[0]);
	CAMERA_W = mxGetN(prhs[0]);

第一句是确定了输入是一个数组,即输入的图片用变量名inData代替。prhs是一个指针数组,里面的指针指向mxArray类型,每一个指针指向一个输入。
第二句是确定了数组的行,即行数用变量CAMERA_H命名。
第三句是确定了数组的列,即列数用变量CAMERA_W命名。
在这里插入图片描述
在这里插入图片描述
如果你是两个数字要输入:要这么用

double b,c;
b = *(mxGetPr(prhs[0]));
c = *(mxGetPr(prhs[1]));

2.输入说完了,现在说输出:
如果你的输出是两个数组,这么用:

 plhs[0] = mxCreateDoubleMatrix(120,1 , mxREAL);
    outdata0 = mxGetPr(plhs[0]);
    plhs[1] = mxCreateDoubleMatrix(120,1 , mxREAL);
    outdata1 = mxGetPr(plhs[1]);

第一句话是创造了一个能存120个数的一维数组。
第二句话则是把此数组赋给变量outdata0,outdata0是我前面已经定义过的变量,看截图。
第三、四句话则是创建另一个数组。
如果你的输出是一个数字,这么用:
在这里插入图片描述
这里的变量b和c是前面定义过的输入要用的那俩。
3.把输出给到输出
上面的第2.应该叫建立输出,这里的第3.才是真·输出。
你要这么给:
在这里插入图片描述
看到了吗?Lline数组哪来的?这是你C语言代码里的,就是你C语言程序的最后求出来的东西,我这里求的是两个数组——Lline和Rline。就很纯粹的Lline的所有值给120次,给到outdata0,硬核赋值,是个人都会这么写。
同理,给一个数输出出来:
在这里插入图片描述
看到了吗?就这一句,*a=add(b,c);你就把c文件里的输出给到matlab里的输出变量就完事了,愣头青似的赋值(用这个=)就完事了。但是,这里要注意,不知你注意到了没有?把输出给到输出 这一步操作是在mexfunction函数里边的,并且它一般是作为mexfunction函数里的最后一步。
…%&#@*¥…好,至此,讲完了。

















忘掉上面的所有,上面全是对.cpp文件的操作,现在另起炉灶说.m文件的使用,编.m文件是打算调用.cpp文件。

第四步:编写.m文件,看看matlab运行C语言的成果。
1.前面说的,输入一幅图,输出两个数组的,这么用:

mex my.cpp;
a = double(imread('4013.bmp'));
[c,d] = my(a);
figure,imshow(a),hold on,plot(c(1:120),1:120,'r-'),hold on,plot(d(1:120),1:120,'g-'),hold on;

在这里插入图片描述
这里的红线就是Lline数组,绿线就是另一个输出的数组Rline。
第一句 mex my.cpp;我的cpp文件名就叫my。
2.前面说的,输入两个数,输出一个数的那个:
不必编写.m文件了,因为调用很简单,就两句话,写在命令行窗口即可。
在这里插入图片描述
看到了吗?这里没有mex my.cpp;为什么?答案是:这就是句废话,没有它照样能用。上面的那个例子,可以把此句话删掉。
此外,除了我用的mxCreateDoubleMatrix函数之外,还有这些函数:
在这里插入图片描述

有点不好说,大意我是说完了,如果还是不会,就请在评论区提问。意会而不好言传。如果说我写的第一篇博客是奶奶都会的那种,那么这篇就是连大学生也不好看明白的那种。

最后,注意了! 在开始这些所有东西之前,请先在matlab的命令行窗口打出以下代码:

mex -setup

如果出现下图这样就没问题:
在这里插入图片描述
如果你收到了红字的警告,那你一定是没有安装visual studio,visual studio这种大型的编译软件带有能和matlab匹配的Microsoft Visual C++,visual studio的版本建议安装2013及以上。

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值