Windows 64 + Matlab 64 MEX混合编程初步
说明
Matlab版本:Matlab R2014a 64-bit
操作系统版本:Windows 8.1 64-bit
编译器:Microsoft Windows SDK 7.1(C/C++) 和 GNU编译器(有CygWin、MinGW、MinGW-64、TMD-64等等,这里选择TDM-64)
Matlab混合编程 下载与安装编译器 Microsoft Windows SDK 7.1(C/C++)点此Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO)打开下载页面,是镜像文件,选择64-bit版,文件大小500M+,全部安装需占磁盘近2G。
下载完成后根据提示安装即可,如果出现问题,安装失败,参考: 部分。
TDM-GCC(gcc/g++)点此tmd-gcc打开下载页面,选择64位版本,40M+,全部安装占用400M+磁盘空间。
根据以前使用经验,安装路径最好不要有空格中文。
安装完成后,开始 -> 运行 -> cmd打开Windows命令窗口,输入gcc -v,如下图所示,显示安装信息,说明安装成功:
最后的战斗:
因为Matlab不支持GNU的编译器,还得做点事,下面的方法来自Using GCC (MinGW) as MATLAB’s MEX compiler 中的的解答:
下面的代码是从Bogdan主页上下载的mexopts.bat文件代码,使用时需要做一点小小的改动。
在下面的代码中找到:set MINGWPATH=p:\mingw64这句代码,将其中的路径p:\mingw64替换成你的TMD-GCC-64的安装目录,如我的是:E:\devtools\TDM-GCC-64,然后保存并将mexopts.bat文件copy到计算机如下路径(复制下面的路径地址,粘贴到资源管理器窗口地址栏,回车即可):
%USERPROFILE%\AppData\Roaming\Mathworks\MATLAB\R2014a\
下面是代码:
@echo off :: NOTE: this is actually not a proper .bat file executed by Windows. MEX :: parses it and only understands a very reduced set of commands: :: "set" and "rem" apparently, everything else is ignored (behaves as :: "rem"), so don‘t do any fancy batch stuff in here. There are some :: undocumented special vars you can set here that will trigger MEX :: to do fancy stuff. :: You can use MinGW64 builds (win32 threads + seh unwinding) from here: :: %20targetting%20Win64/Personal%20Builds/mingw-builds/ :: Tested with the following: :: %20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.1/threads-win32/seh/x86_64-4.9.1-release-win32-seh-rt_v3-rev1.7z :: Set this to your Mingw64 top folder, where you extracted the above set MINGWPATH=p:\mingw64 :: Leave these alone unless you know what you‘re doing. set PATH=%MINGWPATH%\bin;%PATH% set PRELINK_CMDS=echo.>%TEMP%\mexstaticlibs :: You can have MEX run some commands before calling the linker. :: The two examples below will cause gcc to output the full path to some :: static libraries so you can link statically to them (see the :: LINGFLAGSPOST special var below). You can set any command here, however. rem set PRELINK_CMDS1=gcc -print-file-name=libwinpthread.a >> %TEMP%\mexstaticlibs rem set PRELINK_CMDS2=gcc -print-file-name=libquadmath.a >> %TEMP%\mexstaticlibs rem set PRELINK_CMDS3=... :: You can have MEX run some commands also after calling the linker :: (e.g. upx compress the output .mex) rem set POSTLINK_CMDS1=upx -9 "%OUTDIR%%MEX_NAME%%MEX_EXT%" rem set POSTLINK_CMDS2=... :: You can change these if you really need to. set COMPILER=g++ set COMPFLAGS=-c -I"%MATLAB%\extern\include" -DMATLAB_MEX_FILE set OPTIMFLAGS=-O3 -funroll-loops -DNDEBUG set DEBUGFLAGS=-g set NAME_OBJECT=-o set LINKER=g++ set LINKFLAGS=-shared -static-libstdc++ -static-libgcc -L"%MATLAB%\bin\win64" -L"%MATLAB%\extern\lib\win64\microsoft" -lmex -lmx -leng -lmat -lmwlapack -lmwblas set LINKFLAGSPOST=@%TEMP%\mexstaticlibs set NAME_OUTPUT=-o "%OUTDIR%%MEX_NAME%%MEX_EXT%" :: EXAMPLES :: ======== :: You can compile simple files using "mex file.cpp". To support more than 2^32 elements, use :: "mex -largeArrayDims file.cpp" ... use this by default, unless you know what you‘re doing. :: To add include dirs, lib dirs, or compile/link flags, do: :: mex COMPFLAGS="$COMPFLAGS -std=gnu99 -Ix:/include/dir" LINKFLAGS="$LINKFLAGS -Lx:/libs/dir -lmylib" -largeArrayDims file.cpp 选择编译器查看可用编译器:使用mex -setup查看可选择的编译器,如果没有需要自己安装,如果已安装且只安装了编译器Microsoft Windows SDK 7.1(C/C++),显示如下结果:
选择编译器:使用mex -setup lang选择编译器,如mex -setup C++选择C++编译器,如下图:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70676.html