我正在寻找一种在Windows 7计算机上编译Unix MEX文件的简单方法。
MEX文件在Mac OS X 10.9上的MATLAB 2014a中平滑编译(使用“带编码的XCode”作为编译器)。但是,我使用的一些人在使用Windows 7.1 SDK中的C编译器在Windows 7中编译它们时遇到了问题。
据我所知,如果我使用GCC在MATLAB中编译MEX文件,我可以避免这些错误。我想知道是否有人知道如何。我很高兴下载和编辑所需的任何文件,以便我可以a)使用“MEX”命令在MATLAB中编译MEX文件,b)保证“-I”和“-L”指令也将传递给MEX编译器。
请注意,我的问题非常相似to this post from 2+ years ago。也就是说,我已经提出了一个新帖子,因为a)MATLAB / MinGW / MEX从那时起都进行了重大更新(甚至不确定MinGW是否是最简单的方法); b)有一个64位的东西(不确定它是否有问题)和c)“-I”和“-L”选项很重要。
答案 0 :(得分:2)
首先下载MinGW-w64编译器工具链。我们将使用x64版本。这是目前latest binaries的链接(GNU GCC 4.9.1)。
将7z存档解压缩到某个位置(最好没有空格),比如C:\MinGW-w64\mingw64
。
将bin
文件夹添加到PATH环境变量中,类似于set PATH=C:\MinGW-w64\mingw64\bin;%PATH%
,但在系统范围内执行。
创建以下文件(如果您需要C ++ 11支持,请随意添加-std=c++11
之类的编译器开关):
@echo off
set MATLAB=%MATLAB%
set MW_TARGET_ARCH=win64
set MINGWROOT=C:\MinGW-w64\mingw64
set PATH=%MINGWROOT%\bin;%PATH%
set COMPILER=x86_64-w64-mingw32-g++
set COMPFLAGS=-c -m64 -mwin32 -mdll -Wall -DMATLAB_MEX_FILE
set OPTIMFLAGS=-DNDEBUG -O2
set DEBUGFLAGS=-g
set NAME_OBJECT=-o
set LINKER=x86_64-w64-mingw32-g++
set LIBLOC=%MATLAB%\extern\lib\%MW_TARGET_ARCH%\microsoft
set LINKFLAGS=-shared -L"%LIBLOC%" -L"%MATLAB%\bin\%MW_TARGET_ARCH%"
set LINKFLAGSPOST=-lmx -lmex -lmat
set LINKOPTIMFLAGS=-O2
set LINKDEBUGFLAGS=-g
set LINK_FILE=
set LINK_LIB=
set NAME_OUTPUT=-o "%OUTDIR%%MEX_NAME%%MEX_EXT%"
set RC_COMPILER=
set RC_LINKER=
现在我们用它来编译样本MEX文件:
>> mex -f mexopts_mingw64.bat -v -largeArrayDims "C:\Program Files\MATLAB\R2014a\extern\examples\mex\yprime.c"
>> yprime(1,1:4)
ans =
2.0000 8.9685 4.0000 -1.0947
注意:如果您正在编译C ++代码并且想要将二进制文件分发给其他人,则可能还需要包含一些来自MinGW的DLL文件,这些文件将是已编译的MEX文件的依赖项(像libstdc ++这样的东西) 。使用Dependency Walker工具列出所有内容。