非教学,失败案例。

1 下载MinGW64 C/C++编译器

下载链接:https://sourceforge.net/projects/mingw-w64/files/

百度云下载链接:链接:https://pan.baidu.com/s/11erb1P3KLAFD1UxCJIZ8Tw?pwd=jvh6

提取码:jvh6

1、点击Files

matlab dll文件 python 数组 matlab的dll文件_redis

2、向下拉,直到下图,点击x86_64_win32_sjlj。(我使用的MATLAB为R2019a,使用6.4.0版能正常安装。)

matlab dll文件 python 数组 matlab的dll文件_redis_02


3、下载后解压到的文件夹需要保证没有空格!上级文件夹也不能包含空格!Program Files都不行。

matlab dll文件 python 数组 matlab的dll文件_开发语言_03


4、添加系统环境变量:

(1)右键我的电脑->属性。

matlab dll文件 python 数组 matlab的dll文件_redis_04

(2)点击高级系统设置。

matlab dll文件 python 数组 matlab的dll文件_笔记_05

(3)点击:高级,环境变量。

matlab dll文件 python 数组 matlab的dll文件_笔记_06

(4)点击系统变量,新建:

matlab dll文件 python 数组 matlab的dll文件_命令行_07


一直确定就行。

2 Matlab安装配置

matlab命令行内输入:

setenv('MW_MINGW64_LOC','C:\mingw64')
mex -setup
mex -setup c++

matlab dll文件 python 数组 matlab的dll文件_笔记_08

3 编译测试

写一个.m函数,只有函数(function)能编译生成dll/lib/c/h文件。

matlab dll文件 python 数组 matlab的dll文件_redis_09


test_func.m

function [add,minus] = test_func(num1,num2)
    add = num1 + num2;
    minus = num1 + num2;
end

保存后在该文件夹下,命令行输入:

mcc -W cpplib:test_func -T link:lib test_func.m -C

解释:

-W是控制编译之后的封装格式;

-T表示目标,link:lib表示要连接到一个库文件的目标,目标的名字即是.m函数的名字。

其他具体含义可以通过mcc –help命令查看,注意参数的大小写。

matlab dll文件 python 数组 matlab的dll文件_matlab_10


进入文件夹,可以看见编译生成了dll/lib/c/h文件。

matlab dll文件 python 数组 matlab的dll文件_笔记_11

4 另外一种编译方法

命令行输入:

mbuild -setup
mex -setup C++ -client MBUILD
deploytool

等待弹出窗口,点击Library Compiler

matlab dll文件 python 数组 matlab的dll文件_开发语言_12


按照下图,点击C++ Shared Library,点击加号+,可以看到底部的四个将要生成的文件,点击Package,点击确定

matlab dll文件 python 数组 matlab的dll文件_开发语言_13

运行完成后,生成一个.prj文件和一个文件夹,文件夹内:

文件路径:
test_func.m
test_func.prj
test_func
			- for_redistribution
									- MyAppInstaller_web.exe
			- for_redistribution_files_only
									- v2
									- test_func.dll						*****
									- test_func.h						*****
									- test_func.lib						*****
									- GettingStarted.html
			......

打星号*****的文件就是需要用到的。

5 这dll用不了啊!!

将test_func.h、test_func.dll、test_func.lib复制到Qt的工程目录下,在pro文件下添加各种matlab文件路径,然后在main.cpp文件下使用.h文件内的函数,但编译一直不通过!!!不是文件找不到,就是权限被阻止。