mex
编译 MEX 函数或引擎应用程序
语法
说明
mex
编译一个或多个用 MATLAB Data API for C++ 编写的 C++ 源文件并将其链接到当前文件夹中的二进制 MEX 文件中。有关编写这些应用程序的信息,请参阅 编写可从 MATLAB(MEX 文件)调用的 C++ 函数。filenames
如果基于C Matrix API或Fortran Matrix API编写 MEX 文件,则 mex
使用 filenames
-R2017b
api
编译一个或多个 C、C++ 或 Fortran 源文件。在以后的 MATLAB® 版本中,默认的 api
选项将改用交错式复矩阵 API (-R2018a
)。MathWorks 建议您新建 MEX 文件或更新现有 MEX 文件,以使用交错式复矩阵 API。也可以使用 MX_HAS_INTERLEAVED_COMPLEX
宏在各个版本的 MATLAB 中应用预期行为。有关详细信息,请参阅MATLAB Support for Interleaved Complex API in MEX Functions。
有关使用 C、C++ 和 Fortran 应用程序的信息,请参阅将 MATLAB 与外部编程语言和系统集成。
mex
使用指定的 filenames
api
option1 ... optionN
api
和可选的 option1 ... optionN
参量进行编译。option1 ... optionN
参量补充或覆盖默认 mex
编译配置。
mex -client engine
将使用 MATLAB Data API for C++ 编写的 C++ 源文件编译到独立的 MATLAB 引擎应用程序中。有关详细信息,请参阅Elements of a C++ Engine Program。filenames
如果基于MATLAB Engine API for C、C MAT 文件 API、Fortran Engine API 或 Fortran MAT 文件 API 编写应用程序,则 mex -client engine
使用 filenames
-R2017b
api
编译独立应用程序。在以后的 MATLAB 版本中,默认的 api
选项将改用交错式复矩阵 API (-R2018a
)。MathWorks 建议您创建新引擎应用程序并更新现有应用程序,以使用交错式复矩阵 API。
mex -client engine
使用指定的 filenames
api
option1 ... optionN
api
和可选的 option1 ... optionN
参量编译引擎应用程序。
mex -setup [
显示用于编译 MEX 文件的给定语言的默认编译器的有关信息。MATLAB 为每种支持的语言定义一个默认编译器。如果某种给定语言有多个编译器,请使用 lang
]lang
选项更改该语言的默认编译器。有关详细信息,请参阅更改默认编译器和选择 C++ 编译器。
mex -setup -client engine [
选择用来编译引擎应用程序的编译器。lang
]
示例
使用交错式复矩阵 API 编译 MEX 文件
从 matlabroot/extern/examples
文件夹复制源代码示例。
copyfile(fullfile(matlabroot,'extern','examples','mex','explore.c'),'.','f')
编译该 MEX 文件。输出显示特定于您的编译器的信息。
mex -R2018a explore.c
通过传递复矩阵来测试函数。
a = [1 3 5]; b = [5 3 1]; A = complex(a,b); explore(A)
------------------------------------------------ Name: prhs[0] Dimensions: 1x3 Class Name: double ------------------------------------------------ (1,1) = 1 + 5i (1,2) = 3 + 3i (1,3) = 5 + 1i
编译 C MEX 文件
将单个 C 程序 yprime.c
编译为一个 MEX 文件。
从 matlabroot
/extern/examples
文件夹复制源代码示例。
copyfile(fullfile(matlabroot,"extern","examples","mex","yprime.c"),".","f")
编译该 MEX 文件。输出显示特定于您的编译器的信息。
mex yprime.c
Building with 'Microsoft Visual C++ 2019 (C)'. MEX completed successfully.
测试。
T=1; Y=1:4; yprime(T,Y)
ans = 1×4
2.0000 8.9685 4.0000 -1.0947
显示详细编译和故障排除信息
要显示编译和链接命令及其他用于故障排除的信息,请使用详尽模式。输出显示特定于您的平台和编译器的信息。
mex -v -compatibleArrayDims yprime.c
追加编译器选项
使用环境变量指定要传递给编译器的附加选项。
确定变量名称:
要使用 MinGW®、macOS 和 Linux® 编译器编译 C++ 代码,请使用
CXXFLAGS
。要使用 MinGW、macOS 和 Linux 编译器编译 C 代码,请使用
CFLAGS
。对于 Microsoft® Visual Studio® 编译器,请使用
COMPFLAGS
。
使用 Visual Studio 编译 MEX 文件时,请指定 C++17 标准。
mex COMPFLAGS="$COMPFLAGS /std:c++17" yprime.c
有关在不同平台上使用字符串分隔符的详细信息,请参阅覆盖默认编译器开关选项。
覆盖默认编译器开关选项
通过将值 -Wall
追加到现有编译器标志来编译 yprime.c
对应的 MEX 文件。因为该值包括空格字符,所以您必须界定该字符串;界定所用字符取决于平台。
在 MATLAB 提示符处,使用单引号 ('
)。
mex -v COMPFLAGS='$COMPFLAGS -Wall' yprime.c
对于基于 gcc/g++ 的 MinGW-w64 编译器,请使用 Linux 编译器标识符。选择以下命令之一:
mex -v CXXFLAGS='$CXXFLAGS -Wall' yprime.c % C++ compiler mex -v CFLAGS='$CFLAGS -Wall' yprime.c % C compiler
在 Windows® 命令提示符处,使用双引号 ("
)。
mex -v COMPFLAGS="$COMPFLAGS -Wall" yprime.c
在 macOS 和 Linux 上的 Shell 命令行处,使用单引号 ('
)。
mex -v CFLAGS='$CFLAGS -Wall' yprime.c
从多个源文件编译 MEX 文件
MEX 文件示例 fulltosparse
由两个 Fortran 源文件 loadsparse.F
和 fulltosparse.F
组成。要运行此示例,您需要在您的系统上安装支持的 Fortran 编译器。
将源文件复制到当前文件夹。
copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f') copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f')
编译 fulltosparse
MEX 文件。MEX 文件名为 fulltosparse
,这是因为 fulltosparse.F
是命令行上的第一个文件。输出包含特定于您的编译器的信息。
mex -largeArrayDims fulltosparse.F loadsparse.F
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'. MEX completed successfully.
测试。
full = eye(5); spar = fulltosparse(full)
spar = 1,1 1 2,2 1 3,3 1 4,4 1 5,5 1
使用通配符组合源文件
将当前文件夹中的所有 C 源文件组合为 MEX 文件 mymex
。使用 -output
选项控制 MEX 文件的名称。
mex -output mymex *.c
预览编译命令
在不执行命令的情况下,使用 -n
选项可预览编译命令详细信息。输出显示特定于您的平台和编译器的信息。
mex -n yprime.c
创建并链接到单独的目标文件
您可以链接到与源 MEX 文件分开编译的目标文件。
MEX 文件示例 fulltosparse 由两个 Fortran 源文件组成。fulltosparse
文件是入口例程(包含 mexFunction
子例程),loadsparse
包含计算例程。
要运行此示例,您需要在您的系统上安装支持的 Fortran 编译器。将计算子例程复制到当前文件夹。
copyfile(fullfile(matlabroot,'extern','examples','refbook','loadsparse.F'),'.','f')
编译子例程,并将目标文件放在单独的文件夹 c:\objfiles
中。
mkdir c:\objfiles mex -largeArrayDims -c -outdir c:\objfiles loadsparse.F
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'. MEX completed successfully.
将入口子例程复制到当前文件夹。编译 loadsparse
目标文件并与之链接。
copyfile(fullfile(matlabroot,'extern','examples','refbook','fulltosparse.F'),'.','f') mex -largeArrayDims fulltosparse.F c:\objfiles\loadsparse.obj
Building with 'Intel Visual Fortran Composer XE 2013 with Microsoft Visual Studio 2012'. MEX completed successfully.
指定包含文件的路径
要指定包含 MATLAB LAPACK 库子例程以处理复数例程的路径,请使用 -I
选项。要使用这些子例程,您的 MEX 文件必须访问头文件 fort.h
。
将 matrixDivideComplex.c
示例复制到当前文件夹。
copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivideComplex.c'),'.','f')
通过串联 '-I'
和 fort.h
文件的路径来创建 -I
参量。
ipath = ['-I' fullfile(matlabroot,'extern','examples','refbook')];
为 LAPACK 库文件和文件 fort.c
的名称和路径创建变量,这些变量包含复数处理例程。
lapacklib = fullfile(matlabroot,'extern','lib',computer('arch'),'microsoft','libmwlapack.lib'); fortfile = fullfile(matlabroot,'extern','examples','refbook','fort.c');
编译该 MEX 文件。
mex('-v','-R2017b',ipath,'matrixDivideComplex.c',fortfile,lapacklib)
指定库文件的路径
通过使用 -L
和 -l
选项指定 libmwlapack.lib
库,在 Windows 平台上编辑 matrixDivide.c
示例。库文件位于文件夹
中。matlabroot
\extern\lib\arch
\microsoft
将 matrixDivide.c
示例复制到当前文件夹。
copyfile(fullfile(matlabroot,'extern','examples','refbook','matrixDivide.c'),'.','f')
捕获此语句显示的 matlabroot
的值,以便在 mex
命令中使用。
matlabroot
ans = C:\Program Files\MATLAB\R2014a
捕获此语句显示的 arch
的值,以便在 mex
命令中使用。
computer('arch')
ans = win64
要编译 MEX 文件,请将 matlabroot
和 arch
的值复制到 mex
命令中。
mex '-LC:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft' ... -llibmwlapack matrixDivide.c
您必须使用 '
字符,这是因为路径中的 \Program Files
包括一个空格。
定义编译器指令
mxcreatecharmatrixfromstr.c
示例使用 #define
符号 SPACE_PADDING
来确定要在矩阵的字符向量之间使用的字符。要设置该值,请使用 -D
选项编译 MEX 文件。
将示例复制到当前文件夹。
copyfile(fullfile(matlabroot,'extern','examples','mx','mxcreatecharmatrixfromstr.c'),'.','f')
将 SPACE_PADDING
指令设置为在值之间添加空格。
mex mxcreatecharmatrixfromstr.c -DSPACE_PADDING
Building with 'MinGW64 Compiler C '. MEX completed successfully.
编译引擎应用程序
将 engwindemo.c
引擎示例复制到当前文件夹。
copyfile(fullfile(matlabroot,'extern','examples','eng_mat','engwindemo.c'),'.','f')
使用 -client engine
语法编译独立的 MATLAB 引擎应用程序。
mex -client engine engwindemo.c
如果您在 Windows 平台上运行,则必须先将 MATLAB 注册为 COM 服务器。有关详细信息,请参阅Register MATLAB as a COM Server。
运行示例。
!engwindemo
选择 C 编译器
mex -setup
MATLAB 根据支持和兼容的编译器列表显示适用于您的版本和系统的选项。
链接命令选项
要向 mex
链接命令添加选项,请使用 LINKFLAGS
命令行选项。例如,要指定在 Windows 上编译 mymex.c
时可执行文件的环境,请键入:
mex -v LINKFLAGS='$LINKFLAGS /subsystem:windows' mymex.c
输入参数
filenames
— 一个或多个文件名
字符串 | 字符向量
一个或多个文件名,包括名称和文件扩展名,指定为字符串或字符向量。如果文件不在当前文件夹中,请指定该文件的完整路径。
文件名可以是以下项的任意组合:
C、C++ 或 Fortran 源文件。
Simulink® S-Function 文件。
目标文件。
静态库文件。
filenames
必须包含库文件的完全限定路径。该库必须使用mex
当前使用的同一编译器进行编译。要链接动态库,请使用
-l
选项。libname
filenames
中列出的第一个源代码文件是该二进制 MEX 文件或引擎应用程序的名称。要覆盖此命名约定,请使用 -output
选项。
使用 MATLAB 编辑器编写源代码。如果您使用集成开发环境 (IDE),例如 Microsoft Visual Studio 或 Xcode,则您可以使用 mex
命令或遵循Custom Build with MEX Script Options中的规范。
MATLAB 基于 filenames
参量的语言自动选择一个编译器(如果已安装)。
api
— 特定于版本的 API
-R2017b
(默认) | -R2018a
| -largeArrayDims
| -compatibleArrayDims
使用特定于版本的 C Matrix API 或 Fortran Matrix API 进行链接,指定为下表中的值之一。请勿将这些选项组合使用。
不要将此选项用于使用 MATLAB Data API for C++ 的 MEX 文件或引擎应用程序。
API | 描述 |
---|---|
| 通过以下方式进行编译:
在以后的 MATLAB 版本中,默认的 |
-R2018a | 通过以下方式进行编译:
要在 R2018a 中运行使用交错式复矩阵 API 编译的 Fortran MEX 文件,您必须使用 R2018a Update 3。 |
-largeArrayDims | 通过以下方式进行编译:
|
-compatibleArrayDims | 通过以下方式进行编译:
当调用 LAPACK 或 BLAS 函数 时,不要使用 仅适用于 C MEX S-Function 的默认选项。 |
示例: mex -R2018a explore.c
option1 ... optionN
— 可选编译选项
与有效选项标志对应的字符串或字符向量
可选的编译选项,指定为下表中的值之一。除非另有说明,否则选项可在任意平台上按任意顺序出现。
选项 | 描述 |
---|---|
| 使用 Windows RSP 文件。RSP 文件是包含命令行选项的文本文件。不支持非 ASCII 字符。 |
| 仅编译目标文件。不要编译二进制 MEX 文件。 |
| 编译引擎应用程序。 |
|
不要在 D 或 U 与 示例:定义编译器指令 |
| 覆盖默认编译器选择。 不要使用 |
| 添加符号信息并禁用对编译的目标代码的优化。用于调试。 |
| 显示 |
| 将 不要在 示例:指定包含文件的路径 |
| 与 MATLAB 将
如有使用, 使用 L 的小写字母指定 要链接静态库,请使用 示例:指定库文件的路径 |
| 显示但不执行命令,将由 示例:预览编译命令 |
| 优化目标代码。使用此选项执行优化编译。默认情况下,优化处于启用状态。 使用大写字母 O 指定此选项。 |
| 将所有输出文件放在文件夹 |
| 覆盖默认的 MEX 文件命名机制。创建具有相应 MEX 文件扩展名且名称为 示例:使用通配符组合源文件 |
| 更改用于编译 |
| 隐藏信息性消息。在您指定 |
| 删除 C 预处理器宏 不要在 |
| 在详尽模式下编译。在考虑所有命令行参量后显示内部变量的值。显示每个编译步骤和链接步骤的详细计算信息。用于排查编译器设置问题。 |
| 向环境变量 示例:
|
lang
— 语言
C
(默认) | C++
| CPP
| Fortran
语言,指定为下列不区分大小写的值之一。
C | C 编译器,包括 C++。 |
C++ 或 CPP | C++ 编译器 |
Fortran | Fortran 编译器 |
提示
您可以从以下位置运行
mex
:MATLAB 命令行窗口
Windows 系统提示符
macOS 终端
Linux Shell
要在 MATLAB 之外使用命令行,请访问由
[matlabroot '/bin']
(UNIX 平台上)或[matlabroot '\bin\win64']
(Windows 平台上)所指定文件夹中的mex
程序。MEX 文件具有与平台相关的扩展名。您可以将适用于不同平台的多个二进制 MEX 文件放在同一个文件夹中。要标识 MEX 文件扩展名,请使用
mexext
函数。MEX 文件与平台相关的扩展名
平台 二进制 MEX 文件扩展名 Windows
mexw64
Linux
mexa64
采用 Apple 芯片的 macOS
mexmaca64
采用 Intel® 的 macOS
mexmaci64
注意
使用 Rosetta 2 的 Apple 芯片平台不支持使用 Intel 在 macOS 上编译的 MEX 文件。
要使用
mex
为独立 MATLAB 引擎应用程序编译可执行文件,请使用-client engine
选项。mex
命令不支持包含双引号 ("
) 字符的文件夹名称。
版本历史记录
在 R2006a 之前推出R2023b: 支持 Microsoft Visual Studio 编译工具
MATLAB 支持适用于 C 和 C++ 的 Build Tools for Visual Studio 2022 和 2019,以便在 Windows 平台上编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB Engine 和 MAT 文件应用程序。有关支持的编译器的最新列表,请参阅支持和兼容的编译器。
R2023b: 在 Apple 芯片平台上支持 NAG Fortran
MATLAB 支持 NAG® Fortran 编译器,以便在 Apple 芯片平台上编译 Fortran MEX 文件和独立的 MATLAB Engine 和 MAT 文件应用程序。
R2023a: 支持 MinGW-w64 8.1 版编译器
MATLAB 在 Windows 平台上支持 MinGW-w64 8.1 版编译器。有关安装说明,请参阅 MATLAB Answers™ 文章常见问题解答:如何安装 MinGW 编译器?
R2023a: 支持 Intel oneAPI 编译器
MATLAB 支持以下 Intel oneAPI 编译器:
oneAPI 2023 编译器与 Microsoft Visual Studio 2019 和 2022。
oneAPI 2022 编译器与 Visual Studio 2017、2019 和 2022。
在 Windows 和 macOS 平台上用于编译:
C 和 C++ 接口
C、C++ 和 Fortran MEX 文件
C、C++ 和 Fortran 独立 MATLAB 引擎应用程序
C 和 Fortran 独立 MATLAB MAT 文件应用程序
R2023a: 从 MEX 选项文件中删除了 -std=c++11
标志
用 MinGW 和 Linux 编译器编译 C++ 代码时,MEX 选项文件不再包含 CXXFLAGS
标志 -std=c++11
。
现在,macOS 编译器的 MEX 选项文件包含 CXXFLAGS
选项 -std=c++14
。
要继续使用 -std=c++11
选项编译 MEX 文件 myFunc
,请键入:
mex myFunc.cpp 'CXXFLAGS=$CXXFLAGS -std=c++11'
R2022a: Windows 平台上的 UTF-8 系统编码
MATLAB 现在使用 UTF-8 作为其在 Windows 上的系统编码,从而在所有支持的平台上都可采用 Unicode®。从 MEX 文件中进行的系统调用接受并返回 UTF-8 编码的字符串。如果您的 MEX 文件包含采用不同系统编码的第三方库的代码或链接,则您可能会看到乱码文本,因此需要更新代码以符合 Unicode。
R2022a: MEX 文件宏 FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID
已删除
对于在 R2021b 及更早版本中编译的 MEX 文件,MATLAB 提供了 FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID
宏,用于处理将复数传递给 Fortran BLAS 和 LAPACK 函数时平台相关的调用语法差异。从 R2022a 开始,不再需要在不同平台上使用不同调用语法,因此处理这种差异的宏已被删除。
要更新您的代码,请使用 FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID
替换类似如下的语句:
/* Call BLAS function */ /* Use a different call syntax on different platforms */ #ifdef FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID zdotu(&result, &nElements, zinA, &incx, zinB, &incy); #else result = zdotu(&nElements, zinA, &incx, zinB, &incy); #endif
替换为:
/* Call BLAS function */ zdotu(&result, &nElements, zinA, &incx, zinB, &incy);
R2021b: 支持 Microsoft Visual Studio 2022 编译器
从 R2021b Update 3 开始,MATLAB 支持 Microsoft Visual Studio 2022,用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
R2020b: 在 Linux 平台上支持 gcc 版本 5.x 和更高版本
MATLAB 支持 gcc 版本 5.x 和更高版本,用于在 Linux 上编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。如果您使用 4.0 或更早版本,则 MATLAB 会显示警告。
R2020a: macOS 和 Linux 平台上的 UTF-8 系统编码
在 macOS 和 Linux 平台上,MATLAB 使用 UTF-8 作为其系统编码。在 macOS 或 Linux 上编译的 MEX 文件中进行的系统调用接受并返回 UTF-8 编码的字符串。如果您的 MEX 文件包含采用不同系统编码的第三方库的代码或链接,则您可能会看到乱码文本,因此需要更新代码以符合 Unicode。
在 Windows 平台上,如果在 Windows 区域设置中启用使用 Unicode UTF-8 提供全球语言支持选项,则 MATLAB 使用 UTF-8 作为其系统编码。
R2020a: 编译器支持已更改
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2020a 中所示的支持的编译器。
支持 | 编译器 | 平台 |
---|---|---|
已添加 | Intel Parallel Studio XE 2020 for C, C++, and Fortran | Windows |
已添加 | Intel Parallel Studio XE 2020 for Fortran | macOS |
已添加 | Apple Xcode 11.x | macOS |
已停用 | Intel Parallel Studio XE 2017 | Windows macOS |
R2019b: 编译器支持已更改
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2019b 中所示的支持的编译器。
支持 | 编译器 | 平台 |
---|---|---|
已添加 | Microsoft Visual Studio 2019 for C and C++ | Windows |
已停用 | Intel Parallel Studio XE 2015 and XE 2016 for Fortran | Windows macOS |
R2019b: C MEX 和引擎应用程序:<stdbool.h>
定义的 true
、false
和 bool
对于在 Windows 和 Linux 平台上使用 C99 兼容编译器编译 MEX 文件和独立 MATLAB 引擎及 MAT 文件应用程序,true
、false
和 bool
的定义已更改。MATLAB 根据 IEEE 标准 1003.1 的定义,使用 <stdbool.h>
定义这些值:
The <stdbool.h> header shall define the following macros: bool Expands to _Bool. true Expands to the integer constant 1. false Expands to the integer constant 0. _bool_true_false_are_defined Expands to the integer constant 1.
在 R2019a 及更早版本中,MATLAB 在 Windows 和 Linux 平台上将这些值定义为:
true
-#defined
为1
false
-#defined
为0
bool
-typedef
为unsigned char
对于 macOS 平台,没有变化。
R2019a: 支持 Intel Parallel Studio XE 2019 编译器
下表列出了 MATLAB 中新增的 Intel 编译器支持,可用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
支持 | 编译器 | 平台 |
---|---|---|
已添加 | Intel Parallel Studio XE 2019 with Microsoft Visual Studio 2015 and 2017 for C, C++, and Fortran | Windows |
新增 | Intel Parallel Studio XE 2019 for Fortran | macOS |
R2018b: 使用交错式复矩阵 API 编译 Fortran MEX 文件
Fortran Matrix API 支持复数的交错存储表示。有关详细信息,请参阅 MATLAB Support for Interleaved Complex API in MEX Functions
如果您编译 Fortran MEX 函数,则您应该查看Do I Need to Upgrade My MEX Files to Use Interleaved Complex API?
注意
要在 R2018a 中运行使用交错式复矩阵 API 编译的 Fortran MEX 文件,您必须使用 R2018a Update 3。
R2018b: 编译器支持已更改
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2018b 中所示的支持的编译器。
支持 | 编译器 | 平台 |
---|---|---|
已添加 | https://mingw-w64.org 提供的 MinGW-w64 版本 6.3.0 编译器 | Windows |
新增 | Intel Parallel Studio XE 2018 with Microsoft Visual Studio 2015 and 2017 for C, C++, and Fortran | Windows |
新增 | Intel Parallel Studio XE 2018 for Fortran | macOS |
已停用 | Microsoft Visual C++® 2013 Professional | Windows |
R2018a: 从 C++ 更轻松地访问 MATLAB 数据和对象
使用现代 C++ 设计模式、扩展数据类型支持和 MATLAB 写入时复制语义编写 MEX 函数,以更快地处理大型数据数组。有关详细信息,请参阅编写可从 MATLAB(MEX 文件)调用的 C++ 函数。
如果您不需要在 R2017b 及更早版本中工作的 MEX 文件,并且您熟悉现代 C++,请考虑使用新的 C++ MEX API 和 MATLAB Data API for C++。如果您更喜欢使用 C 语言,请继续使用 C MEX API 和 C 矩阵 API。
R2018a: 使用交错式复矩阵 API 编译 C MEX 文件
MATLAB 使用复数的交错存储表示。交错式复矩阵指这种实部和虚部一起存储的表示形式。有关详细信息,请参阅MATLAB Support for Interleaved Complex API in MEX Functions。
如果您编译 C MEX 函数、C/C++ MEX S-Function 或独立的 MATLAB 引擎和 MAT 文件应用程序,请查看Do I Need to Upgrade My MEX Files to Use Interleaved Complex API?。MATLAB 不支持对 Fortran 函数使用交错式复矩阵 API。
此更改不影响 MATLAB 语言。您可以继续使用复数中所述的功能,而无需修改您的函数和脚本。
R2018a: 特定于发行版的编译选项
mex
命令有新的编译选项 -R2017b
和 -R2018a
,它们与版本特定的 C Matrix API 相链接。
-R2017b
- 默认选项。此选项等效于以下命令:mex mymex.c -largeArrayDims -DMEX_DOUBLE_HANDLE
-R2018a
- 使用交错式复矩阵 API,它包含类型化数据访问函数。有关详细信息,请参阅MATLAB Support for Interleaved Complex API in MEX Functions。
R2018a: 指定 Boost 库的版本
虽然 MATLAB 使用 Boost 库版本 1.56.0 进行编译,但从 R2018a 开始,您可以在 MEX 函数中指定任何 Boost 库版本。
R2018a: 编译器支持已更改
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2018a 中所示的支持的编译器。
支持 | 编译器 | 平台 |
---|---|---|
新增 | GNU® gcc 和 gfortran 版本 6.x。推荐使用 6.3 版。 | Linux |
已停用 | GNU gcc 和 gfortran 版本 4.9.x | Linux |
已停用 | Apple Xcode 7.x | macOS |
已停用 | Intel C++ Composer XE 2013 | Windows |
已停用 | Intel Visual Fortran Composer XE 2013 | Windows |
已停用 | Intel Fortran Composer XE 2013 | macOS |
将逐步停用 | Visual C++ 2013 Professional | Windows |
R2017b: 编译器支持已更改
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2017b 中所示的支持的编译器。
支持 | 编译器 | 平台 |
---|---|---|
新增 | Microsoft Visual C++ 2017 Professional、Community 和 Enterprise 版 | Windows |
新增 | Microsoft Visual C++ 2015 和 2013 Community 和 Enterprise 版,并继续支持 Professional 版 | Windows |
新增 | 在 Visual Studio 2017 上安装的 Microsoft Visual Studio 2015 (v140) 工具集 | Windows |
已添加 | https://mingw-w64.org 提供的 MinGW-w64 版本 5.3.0 编译器 | Windows |
已添加 | Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2017 for C, C++, and Fortran | Windows |
已停用 | TDM-GCC 提供的 MinGW-w64 版本 4.9.2 编译器 | Windows |
已停用 | Microsoft Visual C++ 2012 Professional | Windows |
已停用 | Microsoft Windows SDK 7.1 | Windows |
将逐步停用 | 在以后的版本中将停止对 GNU gcc 和 gfortran 版本 4.9 的支持,届时将支持新版本。 | Linux |
R2017a: 默认情况下,MEX 使用 64 位 API 进行编译
mex
函数默认使用大型数组处理 API(-largeArrayDims
选项)。最佳做法是更新您的 MEX 源代码以使用此库并重新编译 MEX 文件。有关说明,请参阅Upgrade MEX Files to Use Interleaved Complex API。
您可以运行现有的二进制 MEX 文件,而无需重新编译。有关详细信息,请参阅MEX 版本兼容性。
如果您在不使用 mex
命令选项 -largeArrayDims
或 -compatibleArrayDims
的情况下编译 MEX 文件,请查看下表以避免依赖 R2017a 中已更改的默认行为。有关使用 -compatibleArrayDims
选项编译 MEX 文件的结果的信息,请参阅What If I Do Not Upgrade?
C MEX S-Function 的默认编译模式仍为 -compatibleArrayDims
。
下表显示您在重新编译 MEX 文件或 S-Function 时必须对 mex
命令进行的更改。
源代码 | mex 命令 - R2016b 及更早版本 | mex 命令 - R2017a 及更高版本 |
---|---|---|
MEX 文件 C/C++ 或 Fortran 源代码使用 32 位 API | mex myMex.c | mex myMex.c -compatibleArrayDims |
mex myMex.c -compatibleArrayDims | 无变化。 | |
MEX 文件 C/C++ 或 Fortran 源代码使用 64 位 API | mex myMex.c -largeArrayDims | 使用: 或者继续使用: |
S-Function C/C++ 源代码使用 32 位 API | mex sfun.c | 无变化。 |
mex sfun.c -compatibleArrayDims | 无变化。 | |
S-Function C/C++ 源代码使用 64 位 API | mex sfun.c -largeArrayDims | 无变化。 |
S-Function Fortran 源代码使用 32 位 API | mex sfun.F | mex sfun.F -compatibleArrayDims |
S-Function Fortran 源代码使用 64 位 API | mex sfun.F -largeArrayDims | 无变化。 |
R2017a: 编译器支持已更改
MATLAB 增加了对下表中编译器的支持,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
支持 | 编译器 | 平台 |
---|---|---|
新增 | Intel Parallel Studio XE 2017 | Windows |
新增 | Intel Parallel Studio XE 2017 for Fortran | macOS |
新增 | Xcode 8.x,从 R2016b 开始提供 | macOS |
R2016b: 嵌入在 MEX 文件中的版本
mex
命令在使用 MATLAB R2016b 及更高版本编译的 MEX 文件中嵌入 MEX 版本号。此版本号标识 MEX 函数在运行时期望链接的矩阵 API 的版本。
如果不使用 mex
命令,则必须更新用于编译 MEX 文件的命令。有关详细信息,请参阅在不使用 mex 命令的情况下编译 MEX 文件。
R2016b: 编译器支持已更改
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2016b 中所示的支持的编译器。
支持 | 编译器 | 平台 |
---|---|---|
新增 | GNU gcc 和 gfortran 版本 4.9 | Linux |
已停用 | GNU gcc 和 gfortran 版本 4.7 | Linux |
新增 | Intel Parallel Studio XE 2016 for Fortran | Mac OS X |
已停用 | Microsoft Visual Studio 2010 Professional | Windows |
将逐步停用 | Visual C++ 2012 Professional Apple Xcode 6.2 | Windows Mac OS X |
R2016a: MEX 命令不接受 .bat
或 .sh
编译器选项文件
mex
命令 -f
选项不接受文件扩展名为 .bat
或 .sh
的参量。
不要使用 -f
选项来指定编译器,而是使用更改默认编译器中所述的工作流。
您可以使用 mex
命令选项修改编译器编译选项。例如,使用 -L
和 -I
选项在您的系统上定位库。使用
选项将选项传递给编译器。varname
=varvalue
R2016a: 编译器支持已更改
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2016a 中所示的支持的编译器。
支持 | 编译器 | 平台 |
---|---|---|
新增 | Intel Parallel Studio XE 2016 | Windows |
新增 | Apple Xcode 7.x | Mac OS X |
已停用 | Microsoft Visual Studio 2008 Professional Edition | Windows |
将逐步停用 | Microsoft Visual Studio 2010 Professional Edition | Windows |
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)