QT,matlab混合调试,MATLAB生成DLL,将多个m文件合并生成一个DLL

     最近再做一个项目。用qt有好的界面调用MATLAB已经写好的算法,亲自踩了很多的坑,在这里分享一下:

1,混合调试有两种方法,比较主流的就是调用MATLAB生成的DLL,进行联调;

2,调用MATLAB自身引擎的方法,进行联调;

自认为调用MATLAB引擎的方式,在运行QT的时候蹦出来MATLAB的界面,会比较尴尬,最终选择了生成DLL的方法。看着网上的教程,以为会很简单,但是这样简单的东西我也弄了两天才搞定,首先困难在于我的QT版本限制,详细的教程手写了一份Word版的,简单明了;解绝了多个M文件生成一个DLL。

基于MATLAB2105a和VS2008联调,MATLAB生成DLL教程:

①将配置好环境,MATLAB默认支持的版本都是VS2010以上的,需要进行扩展:将以下两个文档拷到MATLAB安装路径下matlab\R2016\bin\win64\mexopts.

②启动配置:在命令窗口输入:mex-setup:'C:\Program Files\MATLAB\R2016a\bin\win64\mexopts\msvcpp2008.xml' C++

mbuild -setup:'C:\ProgramFiles\MATLAB\R2016a\bin\win64\mexopts\msvcpp2008.xml' C++

可以看到编译器已经支持VS2008

③接下来就可以新建一个m文件,随便写入一个函数,给个例子:

保存,命名可以如上。

④在命令控制行输入:mcc -Wcpplib:libadd -T link:lib myFunc.m,等待几分钟,运行完毕DLL就已经生成完毕!

3,我们实验室的QT版本限制在4.8.1,对于QT4.x.x的版本只提供了32位的,然而MATLAB与qt联调,位数是一定要一致的,这个大家要注意,本宝宝就是安装了无数次卸载了无数次。

4,还有一个坑,就是我的工程完成之后各种功能也实现了,把程序拷到别人的电脑上,忽然不能用,很是泪奔最后发现我的是2015a版本的dll,lib,而别人的是2015b的,这样居然都要崩溃,然后只能选择在他的环境下面再生成一个DLL,这样虽说混合调试比较方便,但是运行速度是比较慢的。目前还不知道怎么解决

5,还有一个就是要将生成的DLL,lib,.h文件都拷到工程下面,说到这里最麻烦的就是环境变量的配置,这个我会另写一篇来详细展示一下。大家运行qt的时候,dll是一定要放在debug下面的,否则是没有用的。

6,在进行调用DLL的时候,一定要先初始化,

7,我们使用MATLAB来写算法,好处就是处理数组比较方便,因此在qt中使用数组给MATLAB中的赋值,大家可以仔细看看文章,我的工程中涉及到很多,我会另写一篇来详细讲述

你可能感兴趣的:(qt和MATLAB混合调试)