Qt与matlab混合编程

由于项目需要,需要调用现有的matlab程序,考虑将matlab程序生成动态链接库,再在Qt下动态调用。在这个过程中,遇到了许多问题,写个文章mark一下。

1.环境准备

我的电脑是win10,也先装了VS2015,64位的matalb 2018 。我之前一直是用的Qt的mingw版本,32位。但是在Qt下调用matlab程序,需要两者版本一致,都为64位(32位)。苦逼的是,Qt官方并未提供mingw的64位版本,网上有一些网友编译好的版本,也可以自行编译。

参考网址:https://blog.csdn.net/an505479313/article/details/55105397

我尝试过按上述方法编译官方提供的源码,编译完仍出错。我后来下载了QT的msvc  64位的版本。接下来简单介绍Qt5.6.3 + VS2015 的环境搭建过程。

参考1:https://blog.csdn.net/an505479313/article/details/55105397

在Qt中路径中有空格时会被认为换行,使用$$quote()

参考2:《Qt Creator快速入门》

参考3:VS2015+Qt

参照上述链接配置好环境后就能在Qt creator切换MinGw32位,MSVC2015 64位了!


Qt与matlab混合编程_第1张图片

2.QT与Matalb混合编程

参考1:https://blog.csdn.net/qq_33221028/article/details/78398408

参考2:https://blog.csdn.net/HongAndYi/article/details/79477031

3.注意:

1.win10 sdk版本选择:我在装完调试器,搭建好环境后,运行程序,出错:无法链接到rc.exe。原因是我装的sdk版本与vS2015不匹配,只支持2017。支持的VS2015有win 10 的14393版本。卸掉,重装win10 sdk。重装完之后,又出现了找不到setdff.h文件的问题,我在C:\Program Files (x86)\Windows Kits\10\Include下找到了该文件,于是在环境变量加入该路径,重启一下电脑,问题解决。

2.用

extern “C”
{

#include"mydll.h";

}

出错:error: C2894: 模板不能声明为有“C”链接

将extern ”C“去掉

3.Qt本身的bug:出现一大堆错误:

link2019:无法找到xxx.obj

解决:把bulid-xxx-Debug目录直接手动删除,重新构建,问题解决。

4.用mwArray抛出异常,在用mwArray注意要先初始化。

用记事本打开用matlab生成的导出的头文件xxx.h,可以看到有这个函数

参考1:https://blog.csdn.net/HongAndYi/article/details/79477031

最后贴上我的完整代码:

matlab下:


Qt与matlab混合编程_第2张图片
myFun.m

导出m'y'Fundll.h  myFundll.lib  myFundll.dll


Qt与matlab混合编程_第3张图片
matlab导出文件


myFundll.h

从myFundll.h中可以看到导出的函数 myFun(int nargout, mwArray& b, const mwArray& a);

Qt与matlab混合编程_第4张图片
pro文件
Qt与matlab混合编程_第5张图片
main.cpp

你可能感兴趣的:(Qt与matlab混合编程)