第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > QT matlab 混编-qt调用matlab生成dll

QT matlab 混编-qt调用matlab生成dll

时间:2019-08-23 04:02:33

相关推荐

QT matlab 混编-qt调用matlab生成dll

前言

环境:

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。