Matlab生成C++代码及混合编程步骤说明

想要将matlab的计算、处理数据的能力移植到C/C++的项目中,常用两种方法:

matlab生成C++代码和混合编程,下面分别介绍这两种方法的具体步骤(以Matlab 2016a为例):

matlab生成C++代码:

1、右上角新建->脚本,然后在中间弹出来的小窗口中写一段function代码,可以参考下列代码:

function c = calcMatrix(a, b)%#codegen
%This function calculate matrix
c=a*b;
end

写好后保存,保存文件名字一定要和等号后边的function名字相同,参考代码的生成文件名就应该为calcMatrix,这样就生成了.m文件;

2、生成.m文件,点一下运行看看会不会报路径不存在的问题,如下:


这种情况,只要点“添加到路径”就可以了,如果没报请忽略...

在命令窗口中,输入mex -setup,然后选择一个编译器,这里选C++


然后输入coder,弹出对话框MATLABCoder:


然后选择你之前生成的那个.m文件,进入下一步输入参数设置,设置输入参数类型、名称:


然后设置输出参数,Build type选择StaticLibrary,Language选C++,勾选Generate code only然后点击Generate生成即可,如下:


将生成的相关文件calcMatrix.h、calcMatrix.cpp、rtwtypes.h、rt_nonfinite.h、calcMatrix_types.h拷到相关目录下并添加到应用程序中(如果不知道如何设置项目属性可以参见这里:链接

然后在main所在文件中添加如下代码,测试一下吧:

#include "calcMatrix.h"
int main(){
	double a = 0.0, b = 0.0, c = 0.0;
	cin>>a>>b;
	c = calcMatrix (a, b);
	cout<<"c = "<<c<<endl;
	return 0;
}


混合编程:

和上边的过程类似,只是上边是matlab代码生成C++代码(.h+.cpp),混合编程则是生成.dll+.lib+.h

同样在命令窗口输入mex -setup,选择C++,然后输入deploytool,选择Library Compiler,在弹出的窗口的左上角选择“C++ Shared Library”,右侧添加需要转换的.m文件,下面第一行输入转换后的dll文件名,最后点击右上角“Package”对号生成即可(如果添加的.m文件中包含其他.m文件中的函数,不用一起添加,Matlab会自动检测,然后在窗口下面框中显示出依赖文件),打包后生成文件夹如下所示:

第一个文件夹中的exe文件用于程序发布时用,第二个文件夹中包含相当于release下得.h,.lib和 .dll文件,第三个文件包含测试用地.h,.lib和 .dll文件等文件,是测试需要的

测试过程同上,添加dll路径附加包含目录附加库目录的方法如果不清晰可以参考这里:链接,这里需要注意的是,要在附加依赖项中增加matlab的库,并在系统环境变量的Path中添加“Matlab安装目录\bin\win64;”,如下:

libmat.lib

libmex.lib

mclmcr.lib

mclmcrrt.lib

libemlrt.lib

libeng.lib

libfixedpoint.lib

libcovrt.lib






猜你喜欢

转载自blog.csdn.net/u012043391/article/details/71480579