最近再做一个项目。用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,还有一个坑,就是我的工程完成之后各种功能也实现了,把程序拷到别人的电脑上,忽然不能用,很是泪奔