C++调用MATLAB/MATLAB转换C++

本文章主要是为了自己的学习记录,以及可能出现的问题和注意事项,例子可能写的没那么清楚,在最后的学习参考链接中有详细的例子可以学习练习。哪里不懂可以评论回复

测试环境:MATLABR2019b、Visual Studio 2019、MATLABR2022b

在使用C++翻译matlab函数的时候通常可以采用两种方法:一种是将matlab函数直接换成C/C++的方式,另一种方式就是采用函数调用。第一种方法有一定的局限性,不是所有的matlab自带的函数支持直接转成C/C++,可以通过在命令执行框内输入“help -函数名”的方式,打开函数的使用方法,在扩展功能部分会介绍此函数是否支持C/C++代码生成的功能;

一、C++调用MATLAB函数

测试环境:MATLABR2019b、Visual Studio 2019

一、matlab函数的封装

在matlab的命令执行框内依次输入:

1、输出mex -setup 回车,然后点击选择 mex -setup C++;

2、输入mbuild -setup 回车,然后点击选择 mex -setup C++ -client MBUILD

3、输入 mcc -W cpplib: localmax -T link:lib localmax.m-C;

(1)-W 是控制编译之后的封装格式;

(2)cpplib是指编译成C++的lib,如果需要编译成C的lib,就用 lib 即可,去掉 cpp;

(3)cpplib后面的是需要生成文件的文件名,是自己取的,我取名为 localmax;

(4)-T表示目标,link:lib表示要连接到一个库文件的目标,目标的名字即是.m函数的名字,我取名为localmax;

(5)其他具体含义可以通过help –mcc命令查看,注意参数的大小写

4、编译完成后会生成后在函数文件目录下会生成相关文件,但是在C++调用时只用到了四个文件:localmax.ctf、localmax.dll、localmax.lib、localmax.h;

至此MATLAB要用的函数库就已经封装完毕。

二、VS2019环境配置

1、VC++目录

找到自己 Matlab 的安装目录按照以下进行配置;右击项目名称点击属性,打开项目属性页,点开配置属性中的VC++目录,对以下进行matlab库添加:

(1)包含目录:E:\work\MATLAB\MATLAB2019b\extern\include

(2)库目录:E:\work\MATLAB\MATLAB2019b\extern\lib\win64\microsoft

注意:如果未安装matlab,则需要去已安装过 matlab 的电脑上找到上述两个路径所对应的文件然后将其复制到该电脑,最后将其路径添加至包含目录和库目录即可!!!

2、链接器->输入->附加依赖项,添加以下库

mclmcrrt.lib、libmat.lib、libmx.lib、mclmcr.lib、localmax.lib(localmax.lib为编译matlab 函数时生成的文件,addtest.lib是我练习用的);

3、配置系统变量

“我的电脑”右键,打开“属性”;选择“高级系统设置”;找到系统属性页面的“高级”选项,右下方“环境变量”;页面中下方是系统变量,将如下路径添加到环境变量的Path中:

(1)如果电脑上装的有 matlab 则仅需要添加如下路径:

E:\work\MATLAB\MATLAB2019b\bin\win64

(2)如果电脑上没有安装 matlab 则需要添加如下路径:

注意:电脑未安装matlab是除了要添加上述路径还需要安装MCR(matlab编译环境)具体安装步骤及说明见:matlab2020a编译环境 MCR 安装步骤(非常实用)_一米九零小胖子的博客-CSDN博客_matlab mcr安装

说明:E:\work\MATLAB\MATLAB2019b\runtime\win64、E:\work\MATLAB\MATLAB2019b\bin、E:\work\MATLAB\MATLAB2019b\bin\win64,这三个路径在安装 matlab 时系统会自动将其添加到环境变量中,所以如果电脑上未安装matlab则需要去已安装过matlab的电脑上找到上述四个路径所对应的文件,然后将其复制到该电脑,最后将其路径添加至环境变量即可!!!

注意:配置完环境变量后需要重启电脑,环境变量才会生效;

4、添加相关文件

将Matlab生成的四个文件localmax.ctf、localmax.dll、localmax.lib、localmax.h放入项目所在文件夹下,不用再进行添加,放在项目文件夹下作为库函数的调用。(addtest.文件格式,是我练习用的)

5、进行调试

配置相应的输入接口数据变量,然后直接调用localmax函数即可;

注意:调用之前必须先对matlab库进行初始化操作,因此花费时间较长,不适合现实运用;

二、MATLAB转换C++

测试环境:MATLABR2022b(可支持转换c++的函数较多)、Visual Studio 2019

由于调用matlab的函数时,在未下载matlab的情况下,调用附带的文件夹太大(5G+),不满足老师要求,发现islocalmax函数在MATLABR2022b中支持转换成C++;若发现自己想实现的函数在本版本不支持转C++,可以选择更高版本的MATLAB。

现将本次调用的过程进行说明以备后续所用:

  1. 打开C++转换编译器:

本次例子采用的matlab程序:

在matlab的命令执行框内输入:Coder

也可以在APP中找到MATLAB Coder:

2、输入你要转换的.m文件名(之前已经转换过,点击overwrite将覆盖之前的信息);NEXT

3、本次转换函数输入为3*3的矩阵;点击Autodefine Input Types,将会自动给你的输入加上变量类型;NEXT

4、点击Check for Issues;检查你的程序是否有问题,若没有问题,就会出现三个对号;若有问题,需要返回看看自己编写的程序是否有问题;(注意:本次设计是对matlab自带的函数进行转换,此前在2019b上,函数帮助中介绍islocalmax函数不支持转换,操作此流程时转换成功,且没有报错,但是在VS2019上不能使用);NEXT

5、Hardware Board栏中可以选择各种硬件,如果没有满足要求的选项,选择None-select device below;Device栏按照需要进行选择,本设计为AMD芯片的win64电脑(Inetl和AMD的芯片需要区别选择)的环境;Toolchain栏选择编译工具,本项目使用VS2019进行编译;最后点击Generate生成所需代码;NEXT

6、编译成功,就此结束;

7、接下来就是文件的使用;生成的c++程序会存放在你的函数.m文件目录内codegen/lib/inverse下;

8、将上述的所有.h和.cpp文件都复制粘贴到你的vs项目下:

9、需要编写一个主函数文件(源.cpp),作为函数的输入;然后将上一步复制的文件中inverse.cpp给添加到源文件中:

9、在C++运算与matlab运算的结果进行对比:

补充注意:

应该将所有生成的.cpp和.h文件全部加入VS的源文件和头文件下才行;在转inv函数时,只加入inverse.cpp也能运行成功且结果与matlab相同;惯性思维的在转islocalmax函数时,同样操作不能运行成功,报错LINK2001和LINK2019无法解析外部符号(搞了两天,一定要脱离惯性思维),将.cpp文件和.h文件全部加入后成功运行且matlab结果一致。

学习参考链接:

Matlab转c与c++代码_on2way的博客-CSDN博客

C++调用matlab函数_plusplusfei的博客-CSDN博客

【C++&MATLAB】C++调用MATLAB(三):MATLAB库C++使用_Howie_Why的博客-CSDN博客_matlab c++

(VS)c++调用matlab函数_ZYJ_CN的博客-CSDN博客_c++调用matlab的函数

C++调用Matlab生成的DLL动态链接库进行混合编程(win10+VS2015+Matlab2016b)_青青韶华的博客-CSDN博客

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值