1、 下载MinGW-w64
(1) 用已有的MinGW-w64,则新增环境变量MW_MINGW64_LOC = D:\MinGW-w64\mingw64
(2) 若电脑中没有MinGW-w64,则下载TDM-GCC(注意看清64位还是32位),新增环境变量MW_MINGW64_LOC = C:\TDM-GCC-64 ( [http://tdm-gcc.tdragon.net/download ](http://tdm-gcc.tdragon.net/download))
PS: Matlab中设置环境变量 setenv(‘MW_MINGW64_LOC’,’D:\MinGW-w64\mingw64’)(临时)
验证是否设置成功
getenv('MW_MINGW64_LOC')
2、 安装mex
mex –setup
3、
matlab默认的程序文件是.m文件,但有很多情况下需要用matlab调用C语言程序,归纳起来有以几种情况:
1、matlab程序中的某模块非常耗时,改用C语言编写可以提高执行速度。
2、现有成熟算法已经用C语言编写完成,但是matlab程序需要调用其中的某一算法,但不想改写成为.m程序
3、从.m程序可以直接获取源代码,为了保护知识产权,作者希望只提供接口,和库函数,供使用者调用。类似于Windows系统动态链接库(.dll)
Mex文件其实是一种动态链接库,旧版本Matlab可以直接调用.dll,新版本要调用.mexw32或.mexw64文件
Windows 64位 后缀名为mexw64
Wincdows32位 后缀名为mexw32
Linux 64位 后缀名为 mexaw64
使用mex时的注意事项:
1.MATLAB调用mex接口时,将参数个数及参数指针传入接口子程序,由接口子程序完成指针和调用变量的赋值、输出数据的内存空间分配,接口子程序再将参数指针或经过赋值的变量作为参数传递给C的计算子程序,完成调用过程。调用时应注意指针所指对象的正确性,为处理正确最好做相应的强制类型转换。
2.mex并不便于调试,因此应在C的IDE中用测试集调试后再放入mex文件中。
3.MATLAB中指向二维及高维数组的指针递增方式是按行递增的,而C中是按列递增的,因此计算index时要注意位置。
Matlab R2018a之后,复数的实部和虚部一起存储
Matlab R2017及之前,复数的实部和虚部分开存储
暂时默认使用分开存储方式,因此在高版本中若使用到了复数,则编译时需指定matlab版本
参考文献:
MinGW MinGW-w64 TDM-GCC等工具链之间的区别与联系
https://blog.csdn.net/crazycoder8848/article/details/25164471
matlab调用c的示例程序
https://blog.csdn.net/qq_39709535/article/details/84593767
matlab和C混合编程科普性文章*
https://zlearning.netlify.com/communication/matlab/matlabandc.html
https://max.book118.com/html/2017/0618/116360759.shtm
matlab 不同版本复数存储问题
https://ww2.mathworks.cn/help/matlab/matlab_external/matlab-support-for-interleaved-complex.html
https://stackoverflow.com/questions/57167153/issues-with-a-mex-mxgetdoubles-function-when-compiling
matlab官方mex帮助文档
https://ww2.mathworks.cn/help/matlab/ref/mex.html
查询matlab为mexFunction提供的函数
https://ww2.mathworks.cn/help/matlab/cc-mx-matrix-library.html?s_tid=CRUX_lftnav
https://zlearning.netlify.com/communication/matlab/matlabcmexapi
VS code 从入门到进阶
https://www.zhihu.com/lives/1124809477068849152