生成一个c++ mwArray API共享库并构建一个c++应用程序
万博1manbetx支持平台:窗户®, Linux®,Mac
这个例子展示了如何从MATLAB创建一个c++共享库®功能。您可以将生成的库集成到c++应用程序中。这个示例还展示了如何从c++应用程序调用c++共享库。目标系统不需要MATLAB的授权副本。
中创建函数MATLAB
在MATLAB中,检查您想打包的MATLAB代码。
对于本例,复制
矩阵
随MATLAB附带到你的工作文件夹的文件夹。拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“compilersdk”,“c_cpp”,“矩阵”),“矩阵”)
导航到新的
矩阵
工作文件夹中的子文件夹。检查和测试功能
addmatrix.m
,multiplymatrix.m
,eigmatrix.m
.创建调用函数的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++共享库
在MATLAB应用程序标签,在最右边的应用程序部分,单击箭头。在应用程序部署,点击库的编译器.
或者,您可以打开库的编译器在MATLAB命令提示符中输入:
libraryCompiler
在类型部分,单击c++共享库.
在库的编译器app项目窗口,指定要部署的MATLAB应用程序的文件。
在导出功能部分,单击.
在添加文件窗口,浏览到示例文件夹,并选择要打包的函数。点击开放.
该函数被添加到导出的函数文件列表中。重复此步骤,将多个文件打包到同一个应用程序中。
添加
addmatrix.m
,multiplymatrix.m
,eigmatrix.m
添加到主文件列表。在包装选项部分时,决定是否包含MATLAB运行时安装程序在生成的应用程序中选择其中一个选项:
从web下载运行时-生成一个安装程序,用于下载MATLAB运行时并将其与已部署的MATLAB应用程序一起安装。您可以指定安装程序的文件名。
包中包含的运行时—生成包含MATLAB运行时安装程序。您可以指定安装程序的文件名。
请注意
第一次选择此选项时,系统会提示您下载MATLAB运行时安装程序。
指定共享库设置
的库名称字段将自动填充
addmatrix
作为打包的共享库的名称。重命名为libmatrix
.在共享库的实现中始终遵循相同的名称。添加MATLAB示例文件
libmatrixSample.m
您之前创建的。虽然创建共享库不需要c++驱动程序文件,但是使用它们来演示如何创建共享库用c++示例应用程序实现c++ mwArray API共享库.在样品部分中,选择添加现有样本,并选择
libmatrixSample.m
.为生成的c++共享库选择API类型。在API的选择在底部的部分,选择创建使用mwArray API的接口.您也可以将其保留为默认选项以创建两个接口。有关更多信息,请参见c++共享库的API选择.
自定义应用程序及其外观
在库的编译器应用程序,您可以自定义安装程序,自定义您的应用程序,并添加关于应用程序的更多信息。
图书馆信息—已部署的应用信息。您还可以通过更改应用程序图标和启动画面来定制应用程序的外观。生成的安装程序使用此信息填充已安装的应用程序元数据。看到自定义安装程序.
其他安装程序选项-生成的安装程序的默认安装路径和自定义logo选择。看到更换安装路径.
运行库所需的文件-生成的应用程序运行所需的附加文件。这些文件包含在生成的应用程序安装程序中。看到在编译器项目中管理所需文件.
为最终用户安装的文件-与应用程序一起安装的文件。
打包应用程序
当您完成选择打包选项时,保存您的库的编译器投影并生成打包的应用程序。
点击包.
在“保存项目”对话框中,指定保存项目的位置。
在包对话框,验证一下当进程完成时打开输出文件夹被选中。
打包过程完成后,检查目标文件夹中生成的输出。
生成三个文件夹:
for_redistribution
,for_redistribution_files_only
,for_testing
.有关在这些文件夹中生成的文件的更多信息,请参见打包MATLAB函数后生成的文件.
日志文件
PackagingLog.html
包含打包结果。
使用创建c++共享库compiler.build.cppSharedLibrary
作为库编译器应用程序的替代方案,您可以使用编程方法创建c++共享库。如果您已经使用库编译器创建了库,请参见用c++示例应用程序实现c++ mwArray API共享库.
将函数文件列表保存在单元格数组中。
函数文件= {“addmatrix.m”,“multiplymatrix.m”,“eigmatrix.m”}
方法构建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.cpp
c++示例应用程序调用addmatrix
函数。样品\ libmatrixSample2_mwarray.cpp
c++示例应用程序调用eigmatrix
函数。样品\ libmatrixSample3_mwarray.cpp
c++示例应用程序调用multiplymatrix
函数。GettingStarted.html
-包含集成共享库信息的HTML文件。included万博1manbetxSupportPackages.txt
-列出库中包含的所有支持文件的文本文件。万博1manbetxlibmatrix.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 \矩阵示例
在开始之前,确保你安装和配置MATLAB运行时,你有一个安装c++编译器.
打包了c++共享库之后,就可以从c++应用程序中调用它们了。中生成的c++应用程序样品
文件夹是基于您创建的示例MATLAB文件。
复制并粘贴生成的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); } 在系统命令提示符下,导航到您复制的文件夹
libmatrixSample1_mwarray.cpp
.使用编译和链接应用程序
mbuild
在MATLAB提示符或您的系统命令提示符。libmatrixSample1_mwarray.cpp
请注意
的
. lib
extension在Windows上使用。在macOS,文件扩展名为. dylib
在Linux上确实如此所以
.从系统命令提示符运行应用程序。如果在打包步骤中使用样例MATLAB代码,样例c++应用程序将返回与MATLAB代码相同的输出。
libmatrixSample1_mwarray.exe
2 8 14 4 10 16 6 12 18
(可选)使用编译和链接其他示例c++应用程序
mbuild
.您还可以使用生成的c++代码作为指南来创建您自己的应用程序。有关更多细节,请参见将c++共享库与mwArray集成.
另请参阅
libraryCompiler
|compiler.build.cppSharedLibrary
|世纪挑战集团
|deploytool