编译 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
如果基于
用于 C 的 MATLAB 引擎 API
、
C MAT 文件 API
、
Fortran 引擎 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
]
从
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.c
Building with 'MinGW64 Compiler (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 函数文件
-
目标文件
-
静态库文件。
filenames
必须包含库文件的完全限定路径。要链接动态库,请使用
-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
描述
-R2017b
(默认值)
通过以下方式进行编译:
-
分离式复矩阵 API,包含 MATLAB R2017b 及更早版本中的 C 和 Fortran 矩阵 API 功能。
-
大型数组处理 API,用于处理元素数目超过 2
31
–1 个的数组。
-
将图形对象的句柄视为
object
,而不是
double
。
在以后的 MATLAB 版本中,默认的
api
选项将改用交错式复矩阵 API (
-R2018a
)。MathWorks 建议您创建新应用程序并更新现有应用程序,以使用交错式复矩阵 API。也可以使用
MX_HAS_INTERLEAVED_COMPLEX
宏在各个版本的 MATLAB 中应用预期行为。有关详细信息,请参阅
MATLAB Support for Interleaved Complex API in MEX Functions
。
-R2018a
通过以下方式进行编译:
-
使用交错式复矩阵 API,它包含
类型化数据访问
函数。有关详细信息,请参阅
Upgrade MEX Files to Use Interleaved Complex API
。
-
大型数组处理 API
-
将图形对象的句柄视为
object
,而不是
double
。
要在 R2018a 中运行使用交错式复矩阵 API 编译的 Fortran MEX 文件,您必须使用 R2018a Update 3。
-largeArrayDims
通过以下方式进行编译:
-
分离式复矩阵 API
-
大型数组处理 API
-
将图形对象的句柄视为
object
,而不是
double
。要将句柄视为
double
,请将此选项与
-DMEX_DOUBLE_HANDLE
结合使用。
-compatibleArrayDims
通过以下方式进行编译:
-
分离式复矩阵 API
-
使用版本 7.2 数组处理 API,它将数组限制为不超过 2
31
–1 个元素
-
将图形对象的句柄视为
object
,而不是
double
。要将句柄视为
double
,请将此选项与
-DMEX_DOUBLE_HANDLE
结合使用。
当
调用 LAPACK 或 BLAS 函数
时,不要使用
-compatibleArrayDims
选项。
仅适用于 C MEX S-Function 的默认选项。
示例:
mex -R2018a explore.c
option1 ... optionN
—
可选编译选项
与有效选项标志对应的字符串或字符向量
可选的编译选项,指定为下表中的值之一。除非另有说明,否则选项可在任意平台上按任意顺序出现。
选项
描述
@
rspfile
使用 Windows RSP 文件。RSP 文件是包含命令行选项的文本文件。不支持非 ASCII 字符。
-c
仅编译目标文件。不要编译二进制 MEX 文件。
-client engine
编译引擎应用程序。
-D
symbolname
-D
symbolname
=
symbolvalue
-U
symbolname
-D
选项定义 C 预处理器宏。等效于源文件中的以下符号:
-
#define
symbolname
-
#define
symbolname
symbolvalue
-U
选项删除 C 预处理器宏
symbolname
的任何初始定义。
-D
选项的反选。
不要在
D
或
U
与
symbolname
之间添加空格。不要在
=
符号前后添加空格。
示例:
定义编译器指令
-f
filepath
覆盖默认编译器选择。
filepath
是配置文件的名称和完整路径,指定为字符串或字符向量。有关使用非默认编译器的信息,请参阅
更改默认编译器
。
不要使用
-f
选项来编译引擎应用程序。改用
-client engine
选项。
-g
添加符号信息并禁用对编译的目标代码的优化。用于调试。
-h[elp]
显示
mex
的帮助。在操作系统提示符环境下使用。
-I
pathname
将
pathname
添加到文件夹列表以搜索
#include
文件。
不要在
I
和
pathname
之间添加空格。
示例:
指定包含文件的路径
-l
libname
-L
libfolder
-l
libname
与
libfolder
(可选)中的动态对象库
libname
的链接。
MATLAB 将
libname
扩展为:
-
libname
.lib
或
lib
libname
.lib
- Windows 系统
-
lib
libname
.dylib
-
macOS
系统
-
lib
libname
.so
- Linux 系统
如有使用,
-L
选项必须位于
-l
选项之前。在 Linux 或
macOS
系统上使用
-L
选项时,您还必须设置运行时库路径,如
Set Run-Time Library Path
中所述。
使用
L
的小写字母指定
-l
选项。不要在
l
和
libname
之间或
L
和
libfolder
之间添加空格。
要链接静态库,请使用
filenames
输入参数。
示例:
指定库文件的路径
-n
显示但不执行命令,将由
mex
执行。
示例:
预览编译命令
-O
优化目标代码。使用此选项执行优化编译。默认情况下,优化处于启用状态。
使用大写字母
O
指定此选项。
-outdir
dirname
将所有输出文件放在文件夹
dirname
中。
示例:
创建并链接到单独的目标文件
-output
mexname
覆盖默认的 MEX 文件命名机制。创建具有相应 MEX 文件扩展名且名称为
mexname
的二进制 MEX 文件。
示例:
使用通配符组合源文件
-setup
lang
更改用于编译
lang
语言 MEX 文件或引擎应用程序的默认编译器。当您使用此选项时,
mex
将忽略所有其他命令行选项。
-silent
隐藏信息性消息。在您指定
-silent
时,
mex
命令仍会报告错误和警告。
-U
symbolname
删除 C 预处理器宏
symbolname
的任何初始定义。(
-D
选项的反选。)
不要在
U
和
symbolname
之间添加空格。
-v
在详细模式下编译。在考虑所有命令行参数后显示内部变量的值。显示每个编译步骤和链接步骤的详细计算信息。用于排查编译器设置问题。
示例:
显示详细编译和故障排除信息
varname
=
varvalue
向环境变量
varname
追加值。在考虑所有命令行参数后处理此选项。
示例:
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 文件扩展名
Linux(64 位)
mexa64
Apple
Mac
(64 位)
mexmaci64
Windows(64 位)
mexw64
-
要使用
mex
为独立 MATLAB 引擎应用程序编译可执行文件,请使用
-client engine
选项。
-
mex
命令不支持包含双引号 (
"
) 字符的文件夹名称。
版本历史记录
在 R2006a 之前推出
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:
Expands to _Bool.
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
使用:
mex myMex.c
或者继续使用:
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
Intel Parallel Studio XE 2015 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
Intel Parallel Studio XE 2015
Intel C++ Composer XE 2013 with
Microsoft Visual Studio
2013
Windows
新增
Apple Xcode
7.x
Mac OS X
已停用
Microsoft Visual Studio
2008 Professional Edition
Intel C++
Composer XE 2011 with
Microsoft Visual Studio
2010
Intel Visual Fortran Composer XE 2011 with
Microsoft Visual Studio
2010
Windows
将逐步停用
Microsoft Visual Studio
2010 Professional Edition
Microsoft Windows SDK 7.1
Windows
另请参阅
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
Accelerating the pace of engineering and science
MathWorks
is the leading developer of mathematical computing software for engineers and scientists.