在64位Windows 7计算机上使用GCC作为MATLAB 2014a的默认MEX编译器

时间:2014-10-15 21:56:18

标签: c windows matlab gcc mex

我正在寻找一种在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”选项很重要。

1 个答案:

答案 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之类的编译器开关):

    mexopts_mingw64.bat

    @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工具列出所有内容。