主要内容

墨西哥人

构建MEX功能或引擎应用程序

描述

例子

墨西哥人文件名控件编写的一个或多个c++源文件MATLAB数据API.进入当前文件夹中的二进制MEX文件。有关编写这些应用程序的信息,请参阅c++墨西哥人的应用程序

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

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

例子

墨西哥人文件名apioption1 ...申请构建指定的api和可选的option1 ...申请参数。这option1 ...申请参数补充或覆盖默认值墨西哥人构建配置。

墨西哥人客户端引擎文件名编译c++源文件MATLAB数据API.进入独立的MATLAB引擎应用程序。有关更多信息,请参见c++引擎API简介

如果基于MATLAB引擎API的C, 这读mat文件数据的MATLAB C API, 这用于Fortran的MATLAB引擎API, 或者读mat文件数据的MATLAB Fortran API, 然后墨西哥人客户端引擎文件名与...建立独立申请-R2017bapi.在未来版本的MATLAB,默认情况下api选项将更改为使用交错复杂API (-R2018a).MathWorks建议您创建引擎应用程序并更新现有应用程序以使用交错的复杂API。

墨西哥人客户端引擎文件名apioption1 ...申请使用指定构建引擎应用程序api和可选的option1 ...申请参数。

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

Mex -Setup -Client引擎[]选择用于构建引擎应用程序的编译器。

例子

全部折叠

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

Copyfile(FullFile(Matlabroot,“外来的”“例子”'mex'“explore.c”),'。'“f”

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

墨西哥人-R2018a探索

测试。

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

构建一个C程序yprime.c.保存到MEX文件中。

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

Copyfile(FullFile(Matlabroot,“外来的”“例子”'mex''yprime.c'),'。'“f”

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

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

测试。

t = 1;y = 1:4;yprime(t,y)
ans =1×42.000 8.9685 4.0000 -1.0947

要显示编译和链接命令以及其他对故障排除有用的信息,请使用详细模式。

墨西哥人- v-compatibleArrayDimsyprime.c.

输出显示特定于平台和编译器的信息。

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

确定变量名:

  • 用MinGW构建c++代码®macOS和Linux.®编译器,使用CXXFLAGS

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

  • 微软®视觉工作室®编译器,使用COMPFLAGS

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

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

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

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

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

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

对于MINGW-W64编译器,它基于GCC / G ++,请使用Linux编译器标志。选择其中一个命令:

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

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

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

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

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

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

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

Copyfile(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);晶石= fulltosparse(全)
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将计算子例程复制到当前文件夹。

Copyfile(FullFile(Matlabroot,“外来的”“例子”“refbook”“loadsparse。F '),'。'“f”

编译子程序并将对象文件放在单独的文件夹中,c: \ objfiles

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

将Gateway子程序复制到当前文件夹。编译和链接loadsparse对象文件。

Copyfile(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文件必须访问头文件向前

复制matrixDivideComplex.c返回当前文件夹的示例。

Copyfile(FullFile(Matlabroot,“外来的”“例子”“refbook”“matrixDivideComplex.c”),'。'“f”

创建-我参数的连接'-一世'与路径向前文件。

ipath = ['-一世'fullfile (matlabroot“外来的”“例子”“refbook”));

为Lapack库文件和文件创建名称和路径的变量,堡垒,包含复数处理例程。

lapacklib = fullfile(matlabroot,“外来的”'lib',计算机(“拱”),'微软'“libmwlapack.lib”);Fortfile = fullfile(matlabroot,“外来的”“例子”“refbook”'堡垒C');

构建MEX文件。

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

建立matrixDivide.c使用- l- l选项来指定libmwlapack.lib图书馆。库文件位于文件夹中,matlabrootextern \ \ lib \\微软

复制matrixDivide.c返回当前文件夹的示例。

Copyfile(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确定矩阵中的字符向量之间使用的字符。要设置值,请使用mex文件构建- d选择。

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

Copyfile(FullFile(Matlabroot,“外来的”“例子”“mx”“mxcreatecharmatrixfromstr.c”),'。'“f”

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

墨西哥人mxcreatecharmatrixfromstr.c-dspace_padding.
使用“MinGW64 Compiler C”编译。MEX成功完成。

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

Copyfile(FullFile(Matlabroot,“外来的”“例子”'eng_mat'“engwindemo.c”),'。'“f”
墨西哥人客户端引擎engwindemo.c

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

运行该示例。

engwindemo !
墨西哥人设置

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

将选项添加到墨西哥人链接命令,使用LINKFLAGS命令行选项。例如,在构建时为可执行文件指定环境mymex.c在Windows上,类型:

墨西哥人- vlinkflags ='$ linkflags / subsystem:windows'mymex.c

输入参数

全部折叠

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

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

  • C,C ++或Fortran语言源文件

  • 金宝app®s函数文件

  • 对象文件

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

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

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

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

数据类型:字符

与特定发行版的链接矩阵C APIFortran Matrix API.,指定为其中一个值。不要组合这些选项。

不要对MEX文件或使用MATLAB数据API.

API 描述

-R2017b(默认)

建立:

  • 单独的复杂API,其中包含Matlab R2017B及更早版本中的C和Fortran矩阵API功能。

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

  • 将图形对象的句柄视为目的,而不是

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

-R2018a

建立:

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

-largeArrayDims

建立:

  • 单独的复杂API

  • Large-array-handling API

  • 将图形对象的句柄视为目的,而不是.将句柄视为,将此选项结合在一起-DMEX_DOUBLE_HANDLE

-compatibleArrayDims

建立:

  • 单独的复杂API

  • 版本7.2数组处理API,将数组限制为2311的元素

  • 将图形对象的句柄视为目的,而不是.将句柄视为,将此选项结合在一起-DMEX_DOUBLE_HANDLE

请勿使用-compatibleArrayDims选择的时候调用lapack或blas函数

仅C MEX S函数的默认选项。

例子:墨西哥人-R2018a explore.c

可选的构建选项,指定为以下值之一。选项可以在任何平台上以任何顺序出现,除非有指示。

选项 描述

@rspfile

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

- c

只编译一个对象文件。不构建二进制MEX文件。

-Client引擎

构建引擎应用程序。

- dsymbolname
- dsymbolname=symbolvalue
- usymbolname

- d选项定义C预处理器宏。等价于源文件中的以下内容:

  • #定义symbolname

  • #定义symbolnamesymbolvalue

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

中间不加空格D.symbolname.不要在=标志。

例子:定义编译器指令

- ffilepath

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

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

- g

添加符号信息并禁用优化构建对象代码。用于调试。

- h (elp)

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

-我路径名

补充.路径名到要搜索的文件夹列表#包括文件。

中间不加空格一世路径名

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

- l库名
- llibfolder- l库名

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

MATLAB的扩张库名:

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

  • 自由库名. dylib-macOS系统

  • 自由库名所以- Linux系统

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

中间不加空格L.库名之间或L.libfolder

指定- l带小写字母的选项L.

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

例子:指定库文件路径

- n

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

例子:预览构建命令

- o

优化对象代码。使用此选项可使用优化编译。默认情况下启用优化。

用大写字母指定该选项O.

-outdir.目录名

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

例子:创建并链接到独立的对象文件

与产出mexname

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

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

设置

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

-沉默的

抑制信息性消息。这墨西哥人命令仍然报告错误和警告,即使您指定-沉默的

- usymbolname

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

中间不加空格symbolname

- v

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

例子:显示详细的构建和故障排除信息

arnamame.=Varvalue.

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

例子:附加的编译器选项
覆盖默认编译器开关选项

语言,指定为这些不敏感值之一。

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引擎应用程序构建可执行文件,使用-Client引擎选择。

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

之前介绍过的R2006a