主要内容

墨西哥人

构建MEX函数或引擎应用程序

描述

例子

墨西哥人文件名类编写的一个或多个c++源文件MATLAB数据API for c++转换为当前文件夹中的二进制MEX文件。有关编写这些应用程序的信息,请参见编写MATLAB中可调用的c++函数

在编写MEX文件时C矩阵API或者是Fortran矩阵API,然后墨西哥人文件名类生成一个或多个C、c++或Fortran源文件-R2017bapi.在MATLAB的未来版本中®,默认api选项将更改为使用交错的复杂API (-R2018a).MathWorks建议您创建MEX文件并更新现有的MEX文件以使用交错的复杂API。或者,使用MX_HAS_INTERLEAVED_COMPLEX宏来跨MATLAB版本应用所需的行为。有关更多信息,请参见MATLAB支金宝app持交错复杂API在MEX函数

有关使用C、c++和Fortran应用程序的信息,请参见集成MATLAB与外部编程语言和系统

例子

墨西哥人文件名apioption1……optionN使用指定的api和可选的option1……optionN参数。的option1……optionN参数补充或覆盖默认值墨西哥人构建配置。

Mex -客户端引擎文件名构建用。编写的c++源文件MATLAB数据API for c++独立的MATLAB引擎应用程序。有关更多信息,请参见c++引擎程序的元素

如果编写应用程序基于MATLAB Engine API for C,C MAT-File API,Fortran引擎API,或Fortran MAT-File API,然后Mex -客户端引擎文件名属性构建独立应用程序-R2017bapi.在MATLAB的未来版本中,默认的api选项将更改为使用交错的复杂API (-R2018a).MathWorks建议您创建引擎应用程序并更新现有应用程序以使用交错的复杂API。

Mex -客户端引擎文件名apioption1……optionN创建引擎应用程序api和可选的option1……optionN参数。

Mex -setup [显示有关用于构建MEX文件的给定语言的默认编译器的信息。MATLAB为每种支持的语言定义了默认编译器。金宝app如果给定语言有多个编译器,请使用选项更改该语言的默认编译器。有关更多信息,请参见更改默认编译器而且选择一个c++编译器

Mex -setup -客户端引擎[为构建引擎应用程序选择编译器。

例子

全部折叠

中的源代码示例复制matlabroot/外面的例子文件夹中。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,墨西哥人的,“explore.c”),“。”,“f”

构建MEX文件。输出显示特定于编译器的信息。

墨西哥人-R2018aexplore.c

通过传递复杂的矩阵来测试函数。

A = [1 3 5];B = [5 3 1];A =复数(A,b);探索(A)
------------------------------------------------ 名称:prhs[0]维度:1 x3类名:双  ------------------------------------------------ ( 1, - 1) = 1 + 5(1、2)= 3 + 3(1、3)= 5 + 1我

构建一个C程序yprime.c一个MEX文件。

中的源代码示例复制matlabroot/外面的例子文件夹中。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,墨西哥人的,“yprime.c”),“。”,“f”

构建MEX文件。输出显示特定于编译器的信息。

墨西哥人yprime.c
使用“MinGW64编译器(C)”构建。MEX完成成功。

测试。

T = 1;Y = 1:4;yprime (T, Y)
ans =1×42.0000 8.9685 4.0000 -1.0947

若要显示编译和链接命令以及对故障诊断有用的其他信息,请使用详细模式。输出显示特定于平台和编译器的信息。

墨西哥人- v-compatibleArrayDimsyprime.c

使用环境变量指定要传递给编译器的其他选项。

确定变量名:

  • 用于使用MinGW构建c++代码®,macOS、Linux操作系统®编译器,使用CXXFLAGS

  • 使用MinGW构建C代码,macOS,以及Linux编译器,使用CFLAGS

  • 微软®Visual Studio®编译器,使用COMPFLAGS

在使用Visual Studio构建MEX文件时指定c++ 17标准。

墨西哥人COMPFLAGS = '美元COMPFLAGS化= c++ 17 'yprime.c

有关在不同平台上使用字符串分隔符的详细信息,请参见覆盖默认编译器开关选项

构建yprime.c将该值附加到MEX文件中- wall到现有的编译器标志。因为该值包含空格字符,所以必须描述字符串;您使用的字符取决于平台。

在MATLAB提示符下,使用单引号().

墨西哥人- vCOMPFLAGS = ' $ - wall COMPFLAGS 'yprime.c

对于基于gcc/g++的MinGW-w64编译器,使用Linux编译器标志。选择以下命令之一:

墨西哥人- vCXXFLAGS = ' $ - wall CXXFLAGS 'yprime.cc++编译器墨西哥人- vCFLAGS = ' $ CFLAGS - wall’yprime.c% C编译器

在窗口®命令提示符,使用双引号().

墨西哥人- vCOMPFLAGS = " COMPFLAGS美元- wall”yprime.c

在shell命令行上macOS和Linux,使用单引号().

墨西哥人- vCFLAGS = ' $ CFLAGS - wall’yprime.c

MEX文件示例fulltosparse包含两个Fortran源文件,loadsparse。F而且fulltosparse。F.要运行这个示例,您需要在系统上安装一个受支持的Fortran编译金宝app器。

将源文件复制到当前文件夹。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“loadsparse。F '),“。”,“f”)复制文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“fulltosparse。F '),“。”,“f”

构建fulltosparse墨西哥人文件。MEX文件名称为fulltosparse因为fulltosparse。F命令行上的第一个文件。输出包含特定于编译器的信息。

墨西哥人-largeArrayDimsfulltosparse。Floadsparse。F
使用“Intel Visual Fortran Composer XE 2013与Microsoft Visual Studio 2012”构建。MEX完成成功。

测试。

满=眼睛(5);SPAR = fulltosparse(full)
SPAR = 1,1,1,2, 2,1,3,3,1,4,4,1,5,5,1

将当前文件夹中的所有C源文件合并为MEX文件mymex.使用与产出选项来控制MEX文件的名称。

墨西哥人与产出mymex* . c

若要在不执行命令的情况下预览生成命令的详细信息,请使用- n选择。输出显示特定于平台和编译器的信息。

墨西哥人- nyprime.c

您可以链接到与源MEX文件分开编译的目标文件。

MEX文件示例fulltosparse由两个Fortran源文件组成。的fulltosparse文件是网关例程(包含mexFunction子例程),loadsparse包含计算例程。

要运行这个示例,您需要在系统上安装一个受支持的Fortran编译金宝app器。将计算子例程复制到当前文件夹。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“loadsparse。F '),“。”,“f”

编译子例程并将目标文件放在单独的文件夹中,c: \ objfiles

mkdirc: \ objfiles墨西哥人-largeArrayDims- c-outdirc: \ objfilesloadsparse。F
使用“Intel Visual Fortran Composer XE 2013与Microsoft Visual Studio 2012”构建。MEX完成成功。

将网关子例程复制到当前文件夹。的编译和链接loadsparse对象文件。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“fulltosparse。F '),“。”,“f”)墨西哥人-largeArrayDimsfulltosparse。Fc: \ objfiles \ loadsparse.obj
使用“Intel Visual Fortran Composer XE 2013与Microsoft Visual Studio 2012”构建。MEX完成成功。

若要指定包含处理复数例程的MATLAB LAPACK库子例程的路径,请使用-我选择。要使用这些子例程,您的MEX文件必须访问头文件fort.h

复制matrixDivideComplex.c示例添加到当前文件夹。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“matrixDivideComplex.c”),“。”,“f”

创建-我通过连接参数“我”的路径fort.h文件。

Ipath = [“我”fullfile (matlabroot“外来的”,“例子”,“refbook”));

为LAPACK库文件的名称和路径创建变量,fort.c,包含复杂的数字处理程序。

Lapacklib = fullfile(matlabroot,“外来的”,“自由”、计算机(“拱”),“微软”,“libmwlapack.lib”);Fortfile = fullfile(matlabroot,“外来的”,“例子”,“refbook”,“fort.c”);

构建MEX文件。

墨西哥人(“v”,“-R2017b”ipath,“matrixDivideComplex.c”、fortfile lapacklib)

构建matrixDivide.c实例在Windows平台上使用- l而且- l选项来指定libmwlapack.lib图书馆。库文件位于文件夹中matlabrootextern \ \ lib \微软\

复制matrixDivide.c示例添加到当前文件夹。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“matrixDivide.c”),“。”,“f”

捕获的值matlabroot控件中使用的墨西哥人命令。

matlabroot
ans = C:\Program Files\MATLAB\R2014a

捕获的值控件中使用的墨西哥人命令。

计算机(“拱”
Ans = win64

要构建MEX文件,请复制matlabroot而且墨西哥人命令。

墨西哥人lc: \ MATLAB程序文件\ \ R2014a \走读生\ lib \ win64 \微软的...-llibmwlapackmatrixDivide.c

你必须使用字符,因为\程序文件在路径中包含一个空格。

mxcreatecharmatrixfromstr.c示例使用#定义象征SPACE_PADDING确定在矩阵中的字符向量之间使用哪个字符。要设置该值,请使用- d选择。

将示例复制到当前文件夹。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“mx”,“mxcreatecharmatrixfromstr.c”),“。”,“f”

设置SPACE_PADDING指令在值之间添加空格。

墨西哥人mxcreatecharmatrixfromstr.c-DSPACE_PADDING
使用“MinGW64编译器C”构建。MEX完成成功。

复制engwindemo.c引擎示例到当前文件夹。

拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“eng_mat”,“engwindemo.c”),“。”,“f”

构建一个独立的MATLAB引擎应用程序客户端引擎语法。

墨西哥人客户端引擎engwindemo.c

如果您在Windows平台上运行,则必须首先将MATLAB注册为COM服务器。有关更多信息,请参见将MATLAB注册为COM服务器

运行示例。

engwindemo !
墨西哥人设置

的列表为您的版本和系统显示选项金宝app支持和兼容的编译器

控件中添加选项墨西哥人命令,使用LINKFLAGS命令行选项。例如,在构建时为可执行文件指定环境mymex.c在Windows上,输入:

墨西哥人- vLINKFLAGS = ' $ LINKFLAGS /子系统:windows 'mymex.c

输入参数

全部折叠

一个或多个文件名,包括名称和文件扩展名,指定为字符串或字符向量。如果文件不在当前文件夹中,请指定文件的完整路径。

文件名可以是以下任意组合:

  • C、c++或Fortran源文件

  • 金宝app®函数文件

  • 对象文件

  • 静态库文件。文件名必须包含库文件的完全限定路径。要链接动态库,请使用- l库名选择。

中列出的第一个源代码文件文件名是二进制MEX文件或引擎应用程序的名称。要重写此命名约定,请使用与产出选择。

使用MATLAB编辑器来编写源代码。如果您使用集成开发环境(IDE),例如Microsoft Visual StudioXcode,然后您可以使用墨西哥人命令或遵循指南自定义构建与MEX脚本选项

的语言,MATLAB自动选择编译器(如果安装了)文件名参数。

与特定版本的链接C矩阵APIFortran矩阵API,指定为表中的值之一。不要将这些选项组合在一起。

不要将此选项用于使用MATLAB数据API for c++

API 描述

-R2017b(默认)

构建:

  • 独立的复杂API,包含MATLAB R2017b及更早版本中的C和Fortran矩阵API功能。

  • 大数组处理API,用于处理2个以上的数组311的元素。

  • 将图形对象的句柄处理为对象,而不是

在MATLAB的未来版本中,默认的api选项将更改为使用交错的复杂API (-R2018a).MathWorks建议您创建应用程序并更新现有应用程序以使用交错的复杂API。或者,使用MX_HAS_INTERLEAVED_COMPLEX宏来跨MATLAB版本应用所需的行为。有关更多信息,请参见MATLAB支金宝app持交错复杂API在MEX函数

-R2018a

构建:

要运行在R2018a中使用交错复杂API构建的Fortran MEX文件,必须使用R2018a Update 3。

-largeArrayDims

构建:

  • 独立的复杂API

  • Large-array-handling API

  • 将图形对象的句柄处理为对象,而不是.把手柄当作,将此选项与-DMEX_DOUBLE_HANDLE

-compatibleArrayDims

构建:

  • 独立的复杂API

  • 版本7.2数组处理API,它将数组限制为2个311的元素

  • 将图形对象的句柄处理为对象,而不是.把手柄当作,将此选项与-DMEX_DOUBLE_HANDLE

请勿使用-compatibleArrayDims选择的时候调用LAPACK或BLAS函数

仅适用于C MEX s功能的默认选项。

例子:c .搜索

可选生成选项,指定为本表中的值之一。选项可以在任何平台上以任何顺序出现,除非另有说明。

选项 描述

@rspfile

使用Windows RSP文件。RSP文件是包含命令行选项的文本文件。不支持非ascii字符。金宝app

- c

只编译一个目标文件。不构建二进制MEX文件。

客户端引擎

构建引擎应用程序。

- dsymbolname
- dsymbolnamesymbolvalue
- usymbolname

- doptions定义了C预处理器宏。相当于源文件中的以下内容:

  • #定义symbolname

  • #定义symbolnamesymbolvalue

- u选项删除C预处理器宏的任何初始定义,symbolname.的倒数- d选择。

中间不加空格吗DU而且symbolname.的周围不要添加空格的迹象。

例子:定义编译器指令

- ffilepath

覆盖默认编译器选择。filepath配置文件的名称和完整路径,指定为字符串或字符向量。有关使用非默认编译器的信息,请参见更改默认编译器

请勿使用- f构建引擎应用程序的选项。使用客户端引擎选项。

- g

添加符号信息并禁用构建的目标代码的优化。用于调试。

- h (elp)

显示帮助墨西哥人.从操作系统提示符中使用。

-我路径名

增加了路径名到要搜索的文件夹列表# include文件。

中间不加空格吗而且路径名

例子:指定包含文件的路径

- l库名
- llibfolder- l库名

与动态对象库的链接库名(可选)libfolder

MATLAB的扩张库名:

  • 库名. lib自由库名. lib- Windows系统

  • 自由库名. dylib- - - - - -macOS系统

  • 自由库名所以—Linux系统

如果使用,- l选项必须在- l选择。当使用- lLinux或macOS系统中,还必须设置运行时库路径,如中所述设置运行时库路径

指定- l选项中包含小写字母l.中间不加空格吗l而且库名之间或l而且libfolder

要链接静态库,使用文件名输入参数。

例子:指定库文件的路径

- n

显示但不执行命令墨西哥人将执行。

例子:预览构建命令

- o

优化目标代码。使用此选项可进行优化编译。优化在默认情况下是启用的。

用大写字母指定此选项O

-outdir目录名

将所有输出文件放在文件夹中目录名

例子:创建并链接到分离的对象文件

与产出mexname

覆盖默认的MEX文件命名机制。创建一个名为mexname使用适当的MEX文件扩展名。

例子:使用通配符组合源文件

设置

将默认编译器更改为build语言MEX文件或引擎应用程序。当您使用此选项时,墨西哥人忽略所有其他命令行选项。

沉默

抑制信息消息。的墨西哥人命令在指定时仍然报告错误和警告沉默

- usymbolname

删除C预处理器宏的任何初始定义symbolname.(逆的- d选择。)

中间不加空格吗U而且symbolname

- v

以详细模式构建。在考虑所有命令行参数后,显示内部变量的值。显示完整评估的每个编译和链接步骤。用于排除编译器设置问题。

例子:显示详细的生成和故障排除信息

varnamevarvalue

附加值到环境变量varname.在考虑所有命令行参数后处理此选项。

例子:

语言,指定为这些不区分大小写的值之一。

C

C编译器,包括c++

c++CPP

c++编译器

Fortran

Fortran编译器

提示

  • 你可以跑墨西哥人来自:

    • MATLAB命令窗口

    • Windows系统提示符

    • macOS终端

    • Linux shell

    对于MATLAB以外的命令行使用,墨西哥人程序位于指定的文件夹中[matlabroot ' / bin ']在UNIX和[matlabroot ' \ bin \ win64 ']在Windows上。

  • MEX文件有一个平台相关的扩展名。您可以将不同平台的二进制MEX文件放在同一个文件夹中。要识别MEX文件扩展名,请使用mexext函数。

    MEX文件平台相关扩展

    平台 二进制MEX文件扩展名

    Linux(64位)

    mexa64

    苹果Mac(64位)

    mexmaci64

    Windows(64位)

    mexw64

  • 使用墨西哥人为独立的MATLAB引擎应用程序构建可执行文件,请使用客户端引擎选择。

  • 墨西哥人命令不支持包含双引号(金宝app)字符。

版本历史

R2006a之前介绍

全部展开