前言
环境:
win10
Qt5.12 mingW(64位)
matlaba(64位)----mingw w64
主要参考的文章:1. /Justice132/article/details/83830151(参考其软件 depend 查看dll函数名称)
2. /China_Rocky/article/details/104592488
二、使用步骤
重点注意
1.matlab里的编译器我是后来下的mingw64
>> mex -setup -v详细模式已开。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER15'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER16'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER17'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER17'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER18'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER18'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER19'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'...... 正在查找环境变量 'ICPP_COMPILER19'...否。找不到已安装的编译器 'Intel Parallel Studio XE with Microsoft Visual Studio (C)'。... 正在查找编译器 'MinGW64 Compiler (C)'...... 正在查找环境变量 'MW_MINGW64_LOC'...是('D:\mingw6.3\mingw64\bin')。... 正在查找文件 'D:\mingw6.3\mingw64\bin\bin\gcc.exe'...否。找不到已安装的编译器 'MinGW64 Compiler (C)'。... 正在查找编译器 'Microsoft Visual C++ (C)'...... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7' 14.0...否。... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7' 14.0...否。... 正在查找注册表设置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7' 14.0...否。找不到已安装的编译器 'Microsoft Visual C++ (C)'。... 正在查找编译器 'Microsoft Visual C++ (C)'...... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 15.0...否。... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 15.0...否。... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 15.0...是('C:\Program Files (x86)\Microsoft Visual Studio\\TeamExplorer\')。... 正在执行命令 'set "vcroot=C:\Program Files (x86)\Microsoft Visual Studio\\TeamExplorer"&for /f "delims= " %a in ('type "C:\Program Files (x86)\Microsoft Visual Studio\\TeamExplorer\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "C:\Program Files (x86)\Microsoft Visual Studio\\TeamExplorer\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%'...否。找不到已安装的编译器 'Microsoft Visual C++ (C)'。... 正在查找编译器 'Microsoft Visual C++ (C)'...... 正在查找注册表设置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 16.0...否。... 正在查找注册表设置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 16.0...否。... 正在查找注册表设置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 16.0...否。... 正在查找注册表设置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 16.0...否。找不到已安装的编译器 'Microsoft Visual C++ (C)'。... 正在查找编译器 'MinGW64 Compiler (C)'...... 正在查找环境变量 'MW_MINGW64_LOC'...是('D:\mingw6.3\mingw64\bin')。... 正在查找文件 'D:\mingw6.3\mingw64\bin\bin\gcc.exe'...否。找不到已安装的编译器 'MinGW64 Compiler (C)'。错误使用 mex未找到支持的编译器。
命令行窗口mex -setup -v不自动识别编译器,是因为先下的matlab后下的mingw,好像可以设置matlab自动识别,但是我看到有人说输入:>> setenv(‘MW_MINGW64_LOC’, ‘D:\mingw6.3\mingw64’)
setenv('MW_MINGW64_LOC', 'D:\mingw6.3\mingw64')
*MW_MINGW64_LOC是环境变量名(配置),后边是地址*这句话是告诉matlab编译器地址。输入完了再重新输入mex -setup -v 就能看到
然后再按照 参考链接2 一路走下来,打包
2.qt 项目 添加外部库之后 的配置
注意有三:
2.1. 添加matlab其他的依赖库
LIBS += -LD:/matlabb32/extern/lib/*win32*/microsoft -lmclmcrrtLIBS += -LD:/matlabb32/extern/lib/*win32*/microsoft -lmclmcr
…
这些是运行程序需要的matlab “部件”,看准自己的位置,注意斜线方向—— / !!
LIBS+=-LD:/APP/anzhuang/matlab/extern/lib/win64/mingw64 -lmclmcr
我把****/microsoft 换成这个****/win64/mingw64的路径程序也能运行无报错,不知道原因(小白)应该是只要路径下有库都行
(
此外LIBS+= -L$$quote(D:/APP/anzhuang/matlab/extern/lib/win64/microsoft/) -lmclmcrrt
和 LIBS+=-LD:/APP/anzhuang/matlab/extern/lib/win64/mingw64 -lmclmcr 作用完全一样就看你路径下有没有空格,没有用quote那种也没事
)
2.2 添加DEFINES += MW_STDINT_H
需要说明的是由于matlab使用vs的msvc编译器生成的dll文件,生成后我们使用mingW调用,但生成的头文件中指定各种编译器对应的情况,但唯独没有MinGW,这就导致了在使用MinGW编译器时我们使用了:
DEFINES += MW_STDINT_H
2.3添加
INCLUDEPATH += D:/matlabb32/extern/includeDEPENDPATH += D:/matlabb32/extern/include
其他头文件啥的就不说了
最后
1.如果你照着链接二配置完出现错误 error: undefined reference to “ ”… 再往下打开错误发现都是mclmcrrt.h 和其他库的头文件里的函数,这种情况下你看看你的 matlab安的多少位的?qt编译器选的多少位的?matlab安装的 mingw是什么版本? 一定是位数不匹配
不行赶紧卸载qt,在安装时候再选对应的编译器,顺便多选几个编译器省的出问题。
2.dependency walker 查看dll函数名称 这块,最好自己下个打开文件看看,如果出现
symsrv.dll load failure 等等加载出错,和
MATLAB is exiting because of fatal error
11:54:35: 程序异常结束
这种就是你自己电脑生成的myfunc.dll中函数名不和流程上他的(?myFunc@@YAXHAAVmwArray@@ABV1@1@Z)一样,自己打开dependency walker 查看dll函数 mwArray 名称变成什么了,在qt程序里改过来就行了。
end