从强类型 MATLAB 函数创建 C++ MATLAB Data API 共享库标头
此示例说明如何从强类型 MATLAB® 函数创建 C++ MATLAB Data API 共享库头并将其与示例 C++ 应用程序代码集成。目标系统不需要 MATLAB 的许可副本即可运行该应用程序。
前提条件
通过创建一个 MATLAB 搜索路径可见的新工作文件夹来开始此示例。
通过在 MATLAB 命令提示符下键入
mbuild -setup来验证您是否已安装 C++ 编译器。最终用户必须安装 MATLAB Runtime 才能运行应用程序。有关详细信息,请参阅下载并安装 MATLAB Runtime。
出于测试目的,您可以使用安装的 MATLAB 来代替 MATLAB Runtime。
在 MATLAB 中创建函数
使用以下代码创建一个名为 stronglyTypedFactorial.m 的 MATLAB 文件:
function fact = stronglyTypedFactorial(n) arguments n (1,1) uint64 {mustBeReal, mustBeLessThan(n,22)} end fact = 1; for i = 1:n fact = fact*i; end end
在 MATLAB 命令提示符下测试该函数。
stronglyTypedFactorial(5)
ans = uint64 120
使用 mcc 命令生成 C++ 共享库头文件
使用 mcc 命令生成 C++ 共享库头。在命令提示符下,键入:
if ~exist('output/cpp','dir') mkdir output/cpp end mcc -W 'cpplib:stronglyTypedFactorial,generic' stronglyTypedFactorial.m -d output/cpp
v2 > generic_interface 文件夹中创建以下文件:
readme.txtstronglyTypedFactorial.ctfstronglyTypedFactorialv2.hpp
stronglyTypedFactorialv2.hpp 头文件包含一个接受 uint64_t 类型参量的 C++ 数据数组。
matlab::data::Array stronglyTypedFactorial(std::shared_ptr<MATLABControllerType> _matlabPtr, uint64_t n)此 uint64_t 映射与 MATLAB 参量的强类型 uint64 数据类型匹配。
n (1,1) uint64 {mustBeReal, mustBeLessThan(n,22)}有关详细信息,请参阅C++ 和强类型 MATLAB 代码之间的数据类型映射。
将 C++ MATLAB Data API 共享库头文件与 C++ 应用程序集成
使用以下代码创建一个名为 factApp.cpp 的 C++ 应用程序代码文件。
注意
在编写 C++ 应用程序代码时,必须包含由 mcc 命令或 C++ 共享库编译器应用程序生成的头文件(.hpp 文件),以及使用 #include 指令包含的 MatlabCppSharedLib.hpp 头文件。
在 MATLAB 命令提示符下编译并链接 C++ 应用程序。
mbuild factApp.cpp -outdir output/cpp
通过将可部署存档(.ctf 文件)作为输入,从系统命令提示符运行该应用程序。为了测试目的,您可以从 MATLAB 命令提示符运行该应用程序。
!output\cpp\factApp.exe output\cpp\v2\generic_interface\stronglyTypedFactorial.ctfFactorial of 5 is 120
