使用GCC(MinGW)作为MATLAB的MEX编译器

我得到了一个在MATLAB R2011a上运行的项目。由于其中存在多个.c文件-我需要将GCC设置为该项目的MEX编译器。但是,我似乎找不到任何有关如何设置它的解释。我尝试了一个名为gnumex的脚本程序-但失败了(可能是为旧版本的MATLAB设置的)。

知道如何设置吗?


月关宝盒
浏览 1916回答 3
3回答

哈士奇WWW

在Matlab 2011b中,只需在mingw64或cygwin环境中直接编译和链接即可。MINGWPATH=c:/MinGW64CYGPATH=c:/cygwinMATLABROOT=c:/Progra~1/MATLAB/R2011bCC=$(MINGWPATH)/bin/x86_64-w64-mingw32-gcc CFLAG= -Wall -m64 -O3 -I$(MATLABROOT)/extern/include $(SRC) $(LIBS) -o $(EXE)MEXFLAG=-m64 -shared -DMATLAB_MEX_FILE -I$(MATLABROOT)/extern/include -Wl,--export-all-symbols $(LIBS) $(MEXSRC) -o $(MEXTGT).mexw64LIBS= -L$(MATLABROOT)/bin/win64 -L$(MATLABROOT)/extern/lib/win64/microsoft -lmex -lmx -lmwlapack -lmwblas -lengEXE=../bin/engwindemo.exeMEXTGT=SRC=engwindemo.cMEXSRC=all:$(EXE)$(EXE):  $(SRC)    $(CC) $(CFLAG) -ladvapi32 -luser32 -lgdi32 -lkernel32 -lmingwex -o $(EXE)    @rm -f *.o*$(MEXTGT):  $(MEXSRC)    $(CC) $(MEXFLAG) -ladvapi32 -luser32 -lgdi32 -lkernel32 -lmingwex     @rm -f *.o*将此makefile放在源代码目录和上make。无需dll文件转换。

慕无忌1623718

为什么不调整目录中的mexopts.bat文件?这样,您可以像在MATLAB中一样,透明地使用“ mex”命令来编译任何内容,就像通过MATLAB使用来配置一样mex -setup。我很惊讶以前没有人这样做。以下文件适用于x64版本的Matlab和Mingw。我正在使用TDM Mingw64发行版,该发行版安装在中p:\mingw64-tdm。我已经安装了p:\matlab\R2012aMatlab-进行相应编辑。这是我正在使用的mexopts.bat文件,请将其复制粘贴到%USERPROFILE%\AppData\Roaming\MathWorks\MATLAB\R2012a\mexopts.bat:@echo offset MINGWPATH=p:\mingw64-tdmset PATH=%MINGWPATH%\bin;%PATH%set COMPILER=gccset COMPFLAGS=-c -m64 -I"%MATLAB%\extern\include" -DMATLAB_MEX_FILE -Wall -std=c99set OPTIMFLAGS=-O3 -DNDEBUGset DEBUGFLAGS=-gset NAME_OBJECT=-oset LINKER=gccset LINKFLAGS=-shared -L"%MATLAB%\bin\win64" -L"%MATLAB%\extern\lib\win64\microsoft" -lmex -lmx -leng -lmat -lmwlapack -lmwblasset NAME_OUTPUT=-o "%OUTDIR%%MEX_NAME%%MEX_EXT%"然后,您可以尝试在Matlab中执行以下操作:mex -v p:\matlab\R2012a\extern\examples\mex\yprime.cwhich yprime应该产生b:\code\m\yprime.mexw64(或任何当前文件夹)。然后,如果您这样做:yprime(1,1:4)您应该看到:ans =    2.0000    8.9685    4.0000   -1.0947这意味着您在做生意。祝好运!编辑2014年10月:我现在使用比上面改进的mexopts.bat文件,使用不同的MinGW64(比TDM的二进制代码生成速度稍快)。有关详细信息和下载,请参见我的主页。

有只小跳蛙

从MATLAB R2015b开始,已正式支持MinGW!现在,它在受支持的编译器列表的顶部。有关下载MinGW 的官方说明,请参见此处(他们建议使用TDB-GCC)。有列出了一些限制和警告(如不与其他编译器编译库的链接,你必须抓住MEX文件中的例外,等等)。下面是我制作XML文件以执行相同操作的旧方法。过去的岁月已经过去,MATLAB(从R2014a开始)已转移到用于配置MEX文件的基于XML的新系统。目前,MATLAB仍暂时支持旧版.bat文件,但它会困扰您。另一个变化是不同的C和C ++配置(稍后会有更多介绍)。保持不变的是,您只需要下载并提取MinGW发行版并将MATLAB指向它。目前还没有必要MSYS,Cygwin的或gnumex。唯一棘手的部分是将MATLAB指向它,但这是一个解决方案。简洁版本下载并提取MinGW发行版。选择一个,例如MinGW-w64(64位)或TDM-GCC(32位和64位选项)。使用该模板作为模板来定制XML配置文件(详细信息请参见下面的长版)。设置MINGWROOT环境变量。运行mex -setup:[xmlfile] [C|C++]。长版对于MinGW-w64,我执行以下操作进行设置:从Sourceforge获取w64的最新版本(或使用安装程序选择所需的工具链,根据需要选择pthread或Win32线程版本)。提取它,以便您有一个类似于的编译器路径C:\mingw-w64\x86_64-4.9.2-release-posix-seh-rt_v3-rev1\bin\x86_64-w64-mingw32-g++.exe。 如果您打算使用mex命令在MATLAB中进行编译,则不需要MSYS,cygwin或任何其他环境。检查PATH环境变量,以确保g++路径上没有多个编译器(),最好没有。使用全新的命令提示符进行验证。使用自定义XML配置文件进行设置。在我的GitHub存储库上,我以两种文件类型发布了MinGW-w64的C ++配置:mex_C ++ _ mingw-w64.xml和旧版mingw_mexopts.bat。从此作为模板开始,并(可选)使用您下载和提取的MinGW发行版的描述性名称和版本来编辑XML文件。设置(或创建)MINGWROOT环境变量。这就是允许mex命令找到编译器的原因。您可以在MATLAB中(并且每次 MATLAB以其中的startup.m脚本开头userpath)都可以执行此操作setenv,或者使用Windows属性对话框或本机Windows 7 setx.exe命令仅执行一次。运行mex -setup:C:\actual\configFilePath.xml C++。例如,使用.xml文件设置C ++ MEX文件编译:setenv('MINGWROOT','H:\mingw-w64\x86_64-4.9.2-release-posix-seh-rt_v3-rev1')mex -setup:H:\building\GitHub\MATLAB\MinGW\mex_C++_mingw-w64.xml C++输出应如下所示:MEX配置为使用“ MinGW-w64 GCC 4.9.2 posixthreads seh”进行C ++语言编译。如果需要,以类似的方式使用指定C语言的新XML配置文件设置C编译器,即C编译器前端(例如“ x86_64-w64-mingw32-gcc.exe”,该文件不会自动链接C ++标准库) ),根据需要调整链接库,编译器标志(例如,更改-std=c++11为-std=c99)等。关于运行时库的静态链接与动态链接的说明像上面这样用MinGW-w64创建的MEX文件之类的库,可能取决于一些DLL(在运行时):LIBGCC_S_SEH-1.DLL(用于seh例外发行版)和LIBSTDC ++-6.DLL,可能还包括libwinpthread-1.dll。如果选择的是pthreads发行版而不是Win32线程。如果您不想复制这些文件,则可以通过添加以下开关将运行时库静态链接到MEX文件中:-static-libgcc -static-libstdc++XML模板中对此有一个注释。有关libpthread-1.dll的信息,请参见此处。对于TDM-GCC,情况恰恰相反:运行时(包括pthread)是自动静态链接的。若要动态链接,这将需要DLL,但会减小MEX文件的大小,您需要:-shared-libgcc -shared-libstdc++
打开App,查看更多内容
随时随地看视频慕课网APP