主要内容

生成一个c++ mwArray API共享库并构建一个c++应用程序

万博1manbetx支持平台:窗户®, Linux®Mac

这个例子展示了如何从MATLAB创建一个c++共享库®功能。您可以将生成的库集成到c++应用程序中。这个示例还展示了如何从c++应用程序调用c++共享库。目标系统不需要MATLAB的授权副本。

中创建函数MATLAB

  1. 在MATLAB中,检查您想打包的MATLAB代码。

    对于本例,复制矩阵随MATLAB附带到你的工作文件夹的文件夹。

    拷贝文件(fullfile (matlabroot,“外来的”“例子”“compilersdk”“c_cpp”“矩阵”),“矩阵”

    导航到新的矩阵工作文件夹中的子文件夹。

  2. 检查和测试功能addmatrix.mmultiplymatrix.m,eigmatrix.m

  3. 创建调用函数的MATLAB示例代码。示例文件用于用目标语言生成示例应用程序。有关更多信息和限制,请参见驱动程序文件创建示例

    将以下代码保存在一个名为libmatrixSample.m

    演示函数执行的示例脚本% addmatrix, eigmatrix和multiplymatrixA1 = [1 4 7;2 5 8;3 6 9];%在这里初始化a1A2 = a1;在这里初始化a2A = addmatrix(a1, a2);E = eigmatrix(a1);M = multiplymatrix(a1, a2);

    相反,您可以选择在打包步骤中完全不包含示例驱动程序文件。如果创建自己的c++应用程序代码,可以将其移动到适当的目录并使用mbuild对MATLAB函数进行了封装。

使用库编译器App创建一个c++共享库

  1. MATLAB应用程序标签,在最右边的应用程序部分,单击箭头。在应用程序部署,点击库的编译器

    或者,您可以打开库的编译器在MATLAB命令提示符中输入:

    libraryCompiler

  2. 类型部分,单击c++共享库

    库的编译器app项目窗口,指定要部署的MATLAB应用程序的文件。

    1. 导出功能部分,单击向项目添加导出的功能

    2. 添加文件窗口,浏览到示例文件夹,并选择要打包的函数。点击开放

    该函数被添加到导出的函数文件列表中。重复此步骤,将多个文件打包到同一个应用程序中。

    添加addmatrix.mmultiplymatrix.m,eigmatrix.m添加到主文件列表。

  3. 包装选项部分时,决定是否包含MATLAB运行时安装程序在生成的应用程序中选择其中一个选项:

    • 从web下载运行时-生成一个安装程序,用于下载MATLAB运行时并将其与已部署的MATLAB应用程序一起安装。您可以指定安装程序的文件名。

    • 包中包含的运行时—生成包含MATLAB运行时安装程序。您可以指定安装程序的文件名。

      请注意

      第一次选择此选项时,系统会提示您下载MATLAB运行时安装程序。

指定共享库设置

  1. 库名称字段将自动填充addmatrix作为打包的共享库的名称。重命名为libmatrix.在共享库的实现中始终遵循相同的名称。

  2. 添加MATLAB示例文件libmatrixSample.m您之前创建的。虽然创建共享库不需要c++驱动程序文件,但是使用它们来演示如何创建共享库用c++示例应用程序实现c++ mwArray API共享库

    样品部分中,选择添加现有样本,并选择libmatrixSample.m

  3. 为生成的c++共享库选择API类型。在API的选择在底部的部分,选择创建使用mwArray API的接口.您也可以将其保留为默认选项以创建两个接口。有关更多信息,请参见c++共享库的API选择

自定义应用程序及其外观

库的编译器应用程序,您可以自定义安装程序,自定义您的应用程序,并添加关于应用程序的更多信息。

  • 图书馆信息—已部署的应用信息。您还可以通过更改应用程序图标和启动画面来定制应用程序的外观。生成的安装程序使用此信息填充已安装的应用程序元数据。看到自定义安装程序

  • 其他安装程序选项-生成的安装程序的默认安装路径和自定义logo选择。看到更换安装路径

  • 运行库所需的文件-生成的应用程序运行所需的附加文件。这些文件包含在生成的应用程序安装程序中。看到在编译器项目中管理所需文件

  • 为最终用户安装的文件-与应用程序一起安装的文件。

    看到指定要与应用程序一起安装的文件

打包应用程序

当您完成选择打包选项时,保存您的库的编译器投影并生成打包的应用程序。

  1. 点击

    在“保存项目”对话框中,指定保存项目的位置。

  2. 对话框,验证一下当进程完成时打开输出文件夹被选中。

    打包过程完成后,检查目标文件夹中生成的输出。

    • 生成三个文件夹:for_redistributionfor_redistribution_files_only,for_testing

      有关在这些文件夹中生成的文件的更多信息,请参见打包MATLAB函数后生成的文件

    • 日志文件PackagingLog.html包含打包结果。

使用创建c++共享库compiler.build.cppSharedLibrary

作为库编译器应用程序的替代方案,您可以使用编程方法创建c++共享库。如果您已经使用库编译器创建了库,请参见用c++示例应用程序实现c++ mwArray API共享库

  1. 将函数文件列表保存在单元格数组中。

    函数文件= {“addmatrix.m”“multiplymatrix.m”“eigmatrix.m”
  2. 方法构建c++共享库compiler.build.cppSharedLibrary函数。使用名称-值参数添加示例文件并指定库名称和接口API。

    buildResults = compiler.build.cppSharedLibrary(函数文件,...“LibraryName”“libmatrix”...“界面”“mwarray”...“SampleGenerationFiles”“libmatrixSample.m”);

    控件中指定其他选项compiler.build使用名称-值参数命令。详情请参见compiler.build.cppSharedLibrary

    compiler.build.Results对象buildResults包含有关生成类型、生成文件、包含的支持包和生成选项的信息。万博1manbetx

    该函数在名为libmatrixcppSharedLibrary在您当前的工作目录中:

    • 样品\ libmatrixSample1_mwarray.cppc++示例应用程序调用addmatrix函数。

    • 样品\ libmatrixSample2_mwarray.cppc++示例应用程序调用eigmatrix函数。

    • 样品\ libmatrixSample3_mwarray.cppc++示例应用程序调用multiplymatrix函数。

    • GettingStarted.html-包含集成共享库信息的HTML文件。

    • included万博1manbetxSupportPackages.txt-列出库中包含的所有支持文件的文本文件。万博1manbetx

    • libmatrix.cpp- c++源代码文件。

    • libmatrix.def—为链接器提供模块信息的模块定义文件。

    • libmatrix.dll-动态链接库文件。

    • libmatrix.exports—导出包含所有非静态函数名的文件。

    • libmatrix.h- c++头文件。

    • libmatrix.lib-导入库文件。

    • mccExcludedFiles.log-包含应用程序中未包含的任何工具箱功能列表的日志文件。有关不支持的函数的信息,请参见万博1manbetxMATLAB编译器的限制

    • 固定—封装信息的文本文件。

    • requiredMCRs manbetx 845Products.txt—包含所需产品的产品id的文本文件s manbetx 845MATLAB运行时运行应用程序。

    • unresolvedSymbols.txt-包含未解析符号信息的文本文件。

    请注意

    生成的库不包括MATLAB运行时或者安装程序。方法创建安装程序buildResults对象,看到compiler.package.installer

用c++示例应用程序实现c++ mwArray API共享库

请注意

要使用调用所有三个函数并处理错误的更高级应用程序调用库,请使用c++应用程序matrix_mwarray.cpp位于文件夹中

matlabroot\走读生\ \ compilersdk \ c_cpp \矩阵示例
有关更多细节,请参见将c++共享库与mwArray集成

在开始之前,确保你安装和配置MATLAB运行时,你有一个安装c++编译器

打包了c++共享库之后,就可以从c++应用程序中调用它们了。中生成的c++应用程序样品文件夹是基于您创建的示例MATLAB文件。

  1. 复制并粘贴生成的c++代码文件libmatrixSample1_mwarray.cpp样品文件夹中包含libmatrix.lib

    的程序列表libmatrixSample1_mwarray.cpp如下所示。

    /*================================================================= * * LIBMATRIXSAMPLE1 * CPP libmatrix示例驱动程序代码,它将调用使用MATLAB编译器创建一个共享库* SDK。*参考MATLAB编译器SDK文档获取更多信息。* *=================================================================*/ // 包括图书馆特定头文件/ / MATLAB编译器生成的# Include < iostream > # Include“libmatrix.h”空白addmatrixSample(){尝试{mxDouble a1InData [] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};mwArray a1In(3,3, mxDOUBLE_CLASS);a1In。SetData (a1InData 9);mxDouble a2InData [] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};mwArray a2In(3,3, mxDOUBLE_CLASS);a2In。SetData (a2InData 9); mwArray aOut; addmatrix(1, aOut, a1In, a2In); std::cout << aOut << '\n'; } catch (const mwException& e) { std::cerr << e.what() << std::endl; } catch (...) { std::cerr << "Unexpected error thrown" << std::endl; } } int run_main(int argc, const char** argv) { if (!libmatrixInitialize()) { std::cerr << "Could not initialize the library properly" << std::endl; return 2; } else { addmatrixSample(); // Call the application and library termination routine libmatrixTerminate(); } // Note that you should call mclTerminateApplication at the end of // your application to shut down all MATLAB Runtime instances. mclTerminateApplication(); return 0; } // The main routine. On macOS, the main thread runs the system code, and // user code must be processed by a secondary thread. On other platforms, // the main thread runs both the system code and the user code. int main(int argc, const char** argv) { /* Call the mclInitializeApplication routine. Make sure that the application * was initialized properly by checking the return status. This initialization * has to be done before calling any MATLAB APIs or MATLAB Compiler SDK * generated shared library functions. */ if (!mclInitializeApplication(nullptr, 0)) { std::cerr << "Could not initialize the application." << std::endl; return 1; } return mclRunMain(static_cast(run_main), argc, argv); }
  2. 在系统命令提示符下,导航到您复制的文件夹libmatrixSample1_mwarray.cpp

  3. 使用编译和链接应用程序mbuild在MATLAB提示符或您的系统命令提示符。

    libmatrixSample1_mwarray.cpp

    请注意

    . libextension在Windows上使用。在macOS,文件扩展名为. dylib在Linux上确实如此所以

  4. 从系统命令提示符运行应用程序。如果在打包步骤中使用样例MATLAB代码,样例c++应用程序将返回与MATLAB代码相同的输出。

    libmatrixSample1_mwarray.exe
    2 8 14 4 10 16 6 12 18
  5. (可选)使用编译和链接其他示例c++应用程序mbuild.您还可以使用生成的c++代码作为指南来创建您自己的应用程序。

    有关更多细节,请参见将c++共享库与mwArray集成

另请参阅

|||

相关的话题