mex
编译 MEX 函数和引擎或 MAT 文件应用程序
语法
说明
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 ... optionNapi 和可选的 option1 ... optionN 参量进行编译。option1 ... optionN 参量补充或覆盖默认 mex 编译配置。
mex -client engine 将使用 MATLAB Data API for C++ 编写的 C++ 源文件编译到独立的 MATLAB 引擎或 MAT 文件应用程序中。有关详细信息,请参阅Structure of C++ Engine Applications。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 建议您创建新引擎或 MAT 文件应用程序并更新现有应用程序,以使用交错式复矩阵 API。
mex -client engine 使用指定的 filenames api option1 ... optionNapi 和可选的 option1 ... optionN 参量编译引擎或 MAT 文件应用程序。
mex -setup [ 显示用于编译 MEX 文件和引擎或 MAT 文件应用程序的给定语言的默认编译器的有关信息。MATLAB 为每种支持的语言定义一个默认编译器。如果某种给定语言有多个编译器,请使用 lang]lang 选项更改该语言的默认编译器。有关详细信息,请参阅更改默认编译器和选择 C++ 编译器。
mex -setup -client engine [ 选择用来编译引擎或 MAT 文件应用程序的编译器。lang]
示例
从 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 程序 yprime.c 编译为一个 MEX 文件。
从 matlabroot/extern/examples 文件夹复制源代码示例。
copyfile(fullfile(matlabroot,"extern","examples","mex","yprime.c"),".","f")
编译该 MEX 文件。输出显示特定于您的编译器的信息。
mex yprime.cBuilding 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 文件示例 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。
运行示例。
!engwindemomex -setupMATLAB 根据支持和兼容的编译器列表显示适用于您的版本和系统的选项。
要向 mex 链接命令添加选项,请使用 LINKFLAGS 命令行选项。例如,要指定在 Windows 上编译 mymex.c 时可执行文件的环境,请键入:
mex -v LINKFLAGS='$LINKFLAGS /subsystem:windows' mymex.c
输入参数
一个或多个文件名,包括名称和文件扩展名,指定为字符串或字符向量。如果文件不在当前文件夹中,请指定该文件的完整路径。
文件名可以是以下项的任意组合:
C、C++ 或 Fortran 源文件。
Simulink® S-Function 文件。
目标文件。
静态库文件。
filenames必须包含库文件的完全限定路径。该库必须使用mex当前使用的同一编译器进行编译。要链接动态库,请使用
-l选项。libname
filenames 中列出的第一个源代码文件是该二进制 MEX 文件或引擎或 MAT 文件应用程序的名称。要覆盖此命名约定,请使用 -output 选项。
使用 MATLAB 编辑器编写源代码。如果您使用集成开发环境 (IDE),例如 Microsoft Visual Studio 或 Xcode,则您可以使用 mex 命令或遵循Custom Build with MEX Script Options中的规范。
MATLAB 基于 filenames 参量的语言自动选择一个编译器(如果已安装)。
使用特定于版本的 C Matrix API 或 Fortran Matrix API 进行链接,指定为下表中的值之一。请勿将这些选项组合使用。
不要将此选项用于使用 MATLAB Data API for C++ 的 MEX 文件或引擎或 MAT 文件应用程序。
| API | 描述 |
|---|---|
| 通过以下方式进行编译:
在以后的 MATLAB 版本中,默认的 |
-R2018a | 通过以下方式进行编译:
要在 R2018a 中运行使用交错式复矩阵 API 编译的 Fortran MEX 文件,您必须使用 R2018a Update 3。 |
-largeArrayDims | 通过以下方式进行编译:
|
-compatibleArrayDims | 通过以下方式进行编译:
当调用 LAPACK 或 BLAS 函数 时,不要使用 仅适用于 C MEX S-Function 的默认选项。 |
示例: mex -R2018a explore.c
可选的编译选项,指定为下表中的值之一。除非另有说明,否则选项可在任意平台上按任意顺序出现。
| 选项 | 描述 |
|---|---|
| 使用 Windows RSP 文件。RSP 文件是包含命令行选项的文本文件。不支持非 ASCII 字符。 |
| 仅编译目标文件。不要编译二进制 MEX 文件。 |
| 编译引擎或 MAT 文件应用程序。 |
|
不要在 D 或 U 与 例如:定义编译器指令 |
| 覆盖默认编译器选择。 不要使用 |
| 添加符号信息并禁用对编译的目标代码的优化。用于调试。 |
| 显示 |
| 将 不要在 例如:指定包含文件的路径 |
| 与 MATLAB 将
如有使用, 使用 L 的小写字母指定 要链接静态库,请使用 例如:指定库文件的路径 |
| 显示但不执行命令,将由 例如:预览编译命令 |
| 优化目标代码。使用此选项执行优化编译。默认情况下,优化处于启用状态。 使用大写字母 O 指定此选项。 |
| 将所有输出文件放在文件夹 |
| 覆盖默认的 MEX 文件命名机制。创建具有相应 MEX 文件扩展名且名称为 例如:使用通配符组合源文件 |
| 更改用于编译 |
| 隐藏信息性消息。在您指定 |
| 删除 C 预处理器宏 不要在 |
| 在详尽模式下编译。在考虑所有命令行参量后显示内部变量的值。显示每个编译步骤和链接步骤的详细计算信息。用于排查编译器设置问题。 |
| 向环境变量 示例:
|
语言,指定为下列不区分大小写的值之一。
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
mexw64Linux
mexa64采用 Apple 芯片的 macOS
mexmaca64采用 Intel® 的 macOS
mexmaci64注意
使用 Rosetta 2 的 Apple 芯片平台不支持使用 Intel 在 macOS 上编译的 MEX 文件。
要使用
mex为独立 MATLAB 引擎或 MAT 文件应用程序编译可执行文件,请使用-client engine选项。mex命令不支持包含双引号 (") 字符的文件夹名称。
版本历史记录
在 R2006a 之前推出由宏 mxMAXNAM 定义的允许的最大标识符长度增加到 2048。此更改允许变量、函数、类和许多其他实体的名称最长达 2048 个字符。使用更长的标识符可能会对性能和内存产生负面影响。操作系统的最大文件名长度可能短于此限制。
在此更改之前,标识符的最大长度为 63 个字符。
您应重新编译使用常量 mxMAXNAM 的 MEX 文件和引擎或 MAT 文件应用程序。
MATLAB 支持适用于 C 和 C++ 的 Intel oneAPI DPC++/C++ Compiler (icx),以便在 Windows 平台上编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB Engine 和 MAT 文件应用程序。
MATLAB 支持 Intel Fortran 编译器 (ifx),以便在 Windows 平台上编译 Fortran MEX 文件和独立的 MATLAB Engine 和 MAT 文件应用程序。
MATLAB 支持 MinGW 编译器 (Fortran),以便在 Windows 平台上编译 Fortran MEX 文件和独立的 MATLAB Engine 和 MAT 文件应用程序。有关安装说明,请参阅 MATLAB Support for MinGW-w64 C/C++/Fortran Compiler。
MATLAB 支持适用于 C 和 C++ 的 Build Tools for Visual Studio 2022 和 2019,以便在 Windows 平台上编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB Engine 和 MAT 文件应用程序。
MATLAB 支持 NAG® Fortran 编译器,以便在 Apple 芯片平台上编译 Fortran MEX 文件和独立的 MATLAB Engine 和 MAT 文件应用程序。
MATLAB 在 Windows 平台上支持 MinGW-w64 8.1 版编译器。有关安装说明,请参阅 MATLAB Answers™ 文章常见问题解答:如何安装 MinGW 编译器?
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 文件应用程序
用 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'
MATLAB 现在使用 UTF-8 作为其在 Windows 上的系统编码,从而在所有支持的平台上都可采用 Unicode®。从 MEX 文件中进行的系统调用接受并返回 UTF-8 编码的字符串。如果您的 MEX 文件包含采用不同系统编码的第三方库的代码或链接,则您可能会看到乱码文本,因此需要更新代码以符合 Unicode。
对于在 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 Update 3 开始,MATLAB 支持 Microsoft Visual Studio 2022,用于编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
MATLAB 支持 gcc 版本 5.x 和更高版本,用于在 Linux 上编译 C 和 C++ 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。如果您使用 4.0 或更早版本,则 MATLAB 会显示警告。
在 macOS 和 Linux 平台上,MATLAB 使用 UTF-8 作为其系统编码。在 macOS 或 Linux 上编译的 MEX 文件中进行的系统调用接受并返回 UTF-8 编码的字符串。如果您的 MEX 文件包含采用不同系统编码的第三方库的代码或链接,则您可能会看到乱码文本,因此需要更新代码以符合 Unicode。
在 Windows 平台上,如果在 Windows 区域设置中启用使用 Unicode UTF-8 提供全球语言支持选项,则 MATLAB 使用 UTF-8 作为其系统编码。
下表列出了 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 |
下表列出了 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 |
对于在 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为1false-#defined为0bool-typedef为unsigned char
对于 macOS 平台,没有变化。
下表列出了 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 |
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。
下表列出了 MATLAB 中对编译器支持的更改,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
为了继续支持编译您的应用程序,请考虑升级到支持和兼容的编译器 - 版本 2018b 中所示的支持的编译器。
| 支持 | 编译器 | 平台 |
|---|---|---|
新增 | https://www.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 |
使用现代 C++ 设计模式、扩展数据类型支持和 MATLAB 写入时复制语义编写 MEX 函数,以更快地处理大型数据数组。有关详细信息,请参阅编写可从 MATLAB(MEX 文件)调用的 C++ 函数。
如果您不需要在 R2017b 及更早版本中工作的 MEX 文件,并且您熟悉现代 C++,请考虑使用新的 C++ MEX API 和 MATLAB Data API for C++。如果您更喜欢使用 C 语言,请继续使用 C MEX API 和 C Matrix API。
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 语言。您可以继续使用复数中所述的功能,而无需修改您的函数和脚本。
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。
虽然 MATLAB 使用 Boost 库版本 1.56.0 进行编译,但从 R2018a 开始,您可以在 MEX 函数中指定任何 Boost 库版本。
下表列出了 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 |
下表列出了 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://www.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 |
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 | 无变化。 |
MATLAB 增加了对下表中编译器的支持,可用于编译 C 接口、MEX 文件以及独立的 MATLAB 引擎和 MAT 文件应用程序。
| 支持 | 编译器 | 平台 |
|---|---|---|
新增 | Intel Parallel Studio XE 2017 | Windows |
新增 | Intel Parallel Studio XE 2017 for Fortran | macOS |
新增 | Xcode 8.x,从 R2016b 开始提供 | macOS |
mex 命令在使用 MATLAB R2016b 及更高版本编译的 MEX 文件中嵌入 MEX 版本号。此版本号标识 MEX 函数在运行时期望链接的矩阵 API 的版本。
如果不使用 mex 命令,则必须更新用于编译 MEX 文件的命令。有关详细信息,请参阅在不使用 mex 命令的情况下编译 MEX 文件。
下表列出了 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 |
mex 命令 -f 选项不接受文件扩展名为 .bat 或 .sh 的参量。
不要使用 -f 选项来指定编译器,而是使用更改默认编译器中所述的工作流。
您可以使用 mex 命令选项修改编译器编译选项。例如,使用 -L 和 -I 选项在您的系统上定位库。使用 选项将选项传递给编译器。varname=varvalue
下表列出了 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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)