本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

C MEX 文件应用程序

使用 mxArray,编写可用于 MATLAB® R2017b 或更早版本的 C 程序

您可以像调用内置函数一样,从 MATLAB 命令行调用您自己的 C 或 C++ 程序。这些程序称为 MEX 函数,并且函数名称为 MEX 文件名。MEX 函数并不适用于所有应用程序。MATLAB 是一种高生产率环境,尤其适用于消除编译语言中需要花费大量时间的低级编程。一般情况下,请在 MATLAB 中进行编程。除非您的应用程序需要,否则请不要使用 MEX 函数。

要创建 MEX 函数,请使用 MATLAB API 编写程序。这些库中的函数有助于在 MEX 函数和工作区之间传输数据。要选择 MATLAB API,请考虑以下几点。

  • MathWorks 建议您使用现代 C++ 功能创建 MEX 函数,如 MATLAB 数据 API 中定义。有关详细信息,请参阅C++ MEX 应用程序

  • 如果您的 MEX 函数必须在 MATLAB R2017b 或更早版本中运行,或如果您更喜欢使用 C 语言,请使用 C 矩阵 API 和 C MEX API 中的函数。这些 API 使用 MATLAB mxArray 数据结构。此页上列出的函数和主题基于 mxArray

注意

选择来自 C 矩阵 API 或 MATLAB Data API 的函数;您不能混合使用来自这些 API 的函数。

使用 mex 函数将您的源文件编译到可执行程序中。您也可以与其他 MATLAB 用户共享 MEX 文件。

有关编写 S-Function 的信息,请参阅您的 Simulink® 文档。

要调用其他人创建的 MEX 函数,请参阅MEX 文件函数

如果您有 C/C++ 程序并且要从该程序中调用 MATLAB 函数,请使用其中一个引擎 API。

如果您要在 C/C++ 程序中读取和写入 MATLAB 数据,请使用 用于读取 MAT 文件数据的 MATLAB C API

函数

mex编译 MEX 函数或引擎应用程序
dbmexUNIX 平台上启用 MEX 文件调试

C MEX API

mexFunctionEntry point to C/C++ MEX function built with C Matrix API
mexFunctionNameName of current MEX function
mexAtExitRegister function to call when MEX function clears or MATLAB terminates
mexCallMATLABCall MATLAB function, user-defined function, or MEX function
mexCallMATLABWithTrapCall MATLAB function, user-defined function, or MEX-file and capture error information
mexEvalStringExecute MATLAB command in caller workspace
mexEvalStringWithTrapExecute MATLAB command in caller workspace and capture error information
mexGetVariableCopy of variable from specified workspace
mexGetVariablePtrRead-only pointer to variable from another workspace
mexPutVariableArray from MEX function into specified workspace
mexGetValue of specified graphics property
mexSetSet value of specified graphics property
mexPrintfANSI C PRINTF-style output routine
mexErrMsgIdAndTxtDisplay error message with identifier and return to MATLAB prompt
mexWarnMsgIdAndTxtWarning message with identifier
mexIsLockedDetermine if MEX-file is locked
mexLockPrevent clearing MEX-file from memory
mexUnlockAllow clearing MEX-file from memory
mexMakeArrayPersistentMake array persist after MEX file completes
mexMakeMemoryPersistentMake memory allocated by MATLAB software persist after MEX-function completes

主题

编写 C MEX 函数

创建 C 源 MEX 文件

此示例说明如何创建使用 C 矩阵 API 编译的 arrayProduct C MEX 函数。

MEX 函数源代码示例表

链接到 MEX 函数示例的源代码。

MATLAB 数据

在 MEX 文件中使用 mxArray

Memory Management Issues

Rules for managing mxArray memory.

使用 C 矩阵 API 创建 C++ MEX 函数

在创建使用 C 矩阵 API 编译的 MEX 函数时要考虑的 C++ 语言事项。

Error Handling in C MEX Files

Print error information using the mexErrMsgIdAndTxt function.

Handling Large File I/O in MEX Files

How to use 64-bit file I/O in your MEX file.

Testing for Most-Derived Class

How to exclude subclasses of built-in types from MEX file input arguments.

测试您的编译环境

编译 C MEX 函数

此示例显示如何编译示例 C MEX 函数 arrayProduct。使用此示例验证系统的 C 编译配置。有关编译 C++ MEX 函数的信息,请参阅Build C++ MEX Programs。

C 矩阵 API 版本

Upgrade MEX Files to Use Interleaved Complex API

MATLAB Version 9.4 (R2018a) supports an interleaved representation of complex numbers.

升级 MEX 文件以使用 64 位 API

MATLAB 版本 9.2(版本 2017a)默认使用 64 位 API 编译 MEX 文件。

Upgrade MEX Files to Use Graphics Objects

MATLAB Version 8.4 (R2014b) changes the data type of handles to graphics objects from double to object.

共享 MEX 文件

Document Build Information in the MEX File

This example shows how to document the xtimesy MEX file built on a Windows® platform using a Microsoft® Visual C++® compiler.

疑难解答

编译错误

Getting Help When MEX Fails

To help diagnose compiler set up and build errors, call the mex function with verbose option -v.

Compiling MEX File Fails

What to do when compiling a MEX file fails.

Troubleshooting MEX API Incompatibilities

More information for warnings and error messages.

使用 MinGW -w64 编译 C/C++ MEX 文件的限制和疑难解答

使用 MinGW-w64 编译器编译的 MEX 文件的疑难解答。

Symbol mexFunction Unresolved or Not Defined

Every MEX file needs a mexFunction.

运行时错误

无效的 MEX 文件错误

在遇到无效的 MEX 文件错误时如何操作。

MEX 版本兼容性

为了获得最佳效果,请运行使用您的 MATLAB 版本编译的 MEX 文件。

MEX Platform Compatibility

If you get a binary MEX file from another source, be sure that the file was compiled for the same platform on which you want to run it.

MEX API Is Not Thread Safe

Do not call a single session of MATLAB on separate threads from a MEX file.

MEX File Segmentation Fault

What to do when a MEX file causes a segmentation violation or assertion.

MEX File Generates Incorrect Results

What to do when your MEX generates wrong answers.

调试

Debug on Mac Platforms

This example shows how to debug a MEX file on Mac Platforms.

Debug on Linux Platforms

This example shows how to debug a MEX file on Linux® Platforms.