主要内容

头文件和c++编译的库文件Linux

这个例子展示了如何创建一个MATLAB®接口到c++库matrixOperationsLinux®通过调用clibPublishInterfaceWorkflow.对于本例,库是由头文件定义的matrixOperations.hpp共享对象文件libmwmatrixOperations.so

MATLAB在这个文件夹中提供了这些文件:

fullfile (matlabroot“外来的”“例子”“cpp_interface”);

创建一个名为matrixlib对于这个库,在工作流脚本中遵循以下步骤:生成一个库定义文件,定义任何缺失的构造,构建接口,然后测试接口。如果需要遍历发布流程,可以采取其他步骤来恢复参数并启用流程外执行模式。然后,您可以与其他用户共享已发布的界面。

创建工作流脚本

导航到可写文件夹并调用clibPublishInterfaceWorkflow.在对话框中,指定工作流脚本的名称,例如:publishmatrixlib.mlx.工作流脚本具有帮助您发布接口的步骤。使用脚本保存发布接口的参数。您可以在所有平台上使用相同的脚本。

请注意

工作流脚本允许您在多个MATLAB会话期间重复生成、定义、构建和测试接口。方法重新创建的库定义文件中不会保存编辑覆盖现有定义文件选择。

第一步:生成

首先,生成库定义文件。工作流脚本包含生成c++接口活动编辑器任务。使用此任务可以选择组成库的文件,并设置生成库定义文件的选项。

选择文件

类定义了该库matrixOperations.hpp头文件和Windows®matrixOperations.lib库文件。的库类型头文件和编译的库文件,为默认设置。

设置库起始路径,浏览到该文件夹fullfile (matlabroot“外来的”,“例子”,“cpp_interface”)并点击选择文件夹

单击,选择头文件浏览打开文件matrixOperations.hpp

头文件取决于cppshrhelp.hpp头文件。导航到中的文件夹库起始路径并点击选择文件夹

要选择已编译的库文件,请浏览到glnxa64文件夹,并打开libmwmatrixOperations.so文件。

选择配置

在本例中,c++编译器设置为g + +

改变接口库名称matrixlib.使用此名称clib从MATLAB中调用函数。例如,创建一个库对象,在命令提示符中输入:

clib.matrixlib.Mat

验证输出文件夹是一个可写文件夹。

选择覆盖现有定义文件复选框,以便在开发接口时重新创建定义文件。

指定可选的c++库设置

构建这个库的接口不需要可选的c++库设置。

指定可选定义配置

构建这个库的接口不需要可选的定义配置。

显示结果

默认情况下,在生成定义文件时,该函数将显示可用的构造(库中的类和函数)。在开发界面时,还要选择显示不可用结构复选框,以便您可以看到哪些构造可能需要包含更多信息。

生成定义文件

点击生成定义文件.该脚本显示其进度并创建库定义文件definematrixlib.m在指定的输出文件夹中。

警告:用于生成接口文件的文件中的某些c++语言构造不受支持,不能导入。金宝app使用g++编译器。定义文件definematrixlib。m包含MATLAB支持的10个构造的定义。金宝app-完全定义了5个构念。- 5个结构部分定义并注释掉。要在接口中包含5个未定义的结构,取消注释并完成definematrixlib.m中的定义。要构建接口,请调用build(definematrixlib)。
MATLAB接口到matrixlib库类clib.matrixlib.Mat构造函数:clib.matrixlib.Mat(clib.matrixlib.Mat) clib.matrixlib.Mat()方法:uint64 getLength()没有属性定义函数clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)

在多个会话上启用开发工具

在发布接口时,可以遍历步骤、关闭和重新打开publishmatrixlib.mlx脚本,或重新启动MATLAB。按照这些部分中的说明来帮助您处理这些工作流。

  • 跨MATLAB会话保存工作区变量。在恢复库定义部分,设置outputFolderPath属性中的值输出文件夹参数。设置libraryNameForInterface变量为接口库名称参数matrixlib.然后运行该部分。有关更多信息,请参见恢复库定义

  • 考虑运行启用进程外执行模式部分。在开发接口时使用此模式可以消除在测试时重新启动MATLAB的需要。调用库中的功能后,可以通过运行卸载进程外库部分。有关更多信息,请参见加载进程外c++库

第二步:定义

在创建库定义文件时,MATLAB报告了部分定义了五个构造。要完整地定义功能,请编辑definematrixlib.m文件。要编辑该文件,请运行定义部分。

滚动库定义文件以查找用于这些构造的注释代码块。MATLAB不能自动确定这些函数使用的参数的大小。

  • setMat类的c++方法

  • getMat类的c++方法

  • copyMat类的c++方法

  • addMatc++包函数

  • updateMatBySizec++包函数

基于文档的matrixOperations库,您可以为其提供值<形>在参数定义语句中。有关更多信息,请参见定义缺少的SHAPE参数

  1. 对于每个构造,取消定义它的语句的注释。

  2. 取代<形>具有这些值的参数。

    构造

    参数名称

    c++的定义

    描述

    取代<形>与价值

    setMat src Int [] SRC

    矩阵的长度由输入参数定义len

    “兰”
    getMat RetVal Int const

    输出参数的长度由输入参数定义len

    “兰”
    copyMat 桌子 Int * dest

    的长度桌子是由输入参数定义的len

    “兰”
    addMat 垫子const *垫子

    该函数接受单个参数论点。

    1
    updateMatBySize 加勒比海盗 Int * arr

    的长度加勒比海盗是由输入参数定义的len

    “兰”
  3. 保存并关闭定义文件。

  4. 要验证在文件中所做的编辑,请运行确认编辑并运行summary部分。修复文件中报告的任何错误。的总结函数显示接口现在包含setMatgetMatcopyMataddMat,updateMatBySize

MATLAB接口到matrixlib库类clib.matrixlib.Mat构造函数:clib.matrixlib.Mat(clib.matrixlib.Mat) clib.matrixlib.Mat()方法:setMat(clib.array.matrixlib.Int) clib.array.matrixlib.Int getMat(uint64) uint64 getLength() copyMat(clib.array.matrixlib.Int)无属性定义函数int32 clib.matrixlib.addMat(clib.matrixlib.Mat) clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32) clib.matrixlib.updateMatBySize(clib.matrixlib.Mat,clib.array.matrixlib. mat)

3 .构建

为了建立matrixlib接口到库,运行构建部分的脚本。

构建接口文件matrixlibInterface。对于clib包matrixlib。接口文件` matrixlibInterface。所以'内置文件夹'/home/Documents/MATLAB/matrixlib'。要使用该库,请将接口文件文件夹添加到MATLAB路径。目录“/ home /文件/ MATLAB / matrixlib”)

请注意

您可以重复生成、定义和构建步骤。但是,在库中显示帮助或调用函数后,就不能更新definematrixlib定义文件在同一MATLAB会话。重新启动MATLAB或通过更改接口库名称参数中的选择配置部分。

4 .测试

设置并复制运行时库

运行设置并复制运行时库部分。这个库没有额外的运行时依赖项,因此不需要修改命令。

启用进程外执行模式

如果需要更改定义文件,则运行此命令设置在进程外调用接口库的能力,以便不必重新启动MATLAB。有关更多信息,请参见加载进程内或进程外的c++库

在接口库上调用帮助

要显示接口库的帮助,请运行在接口库上调用帮助部分。

编写代码调用和测试接口库

中的代码部分编写代码调用和测试接口库要编写这些测试:

matObj = clib.matrixlib.Mat;创建一个Mat对象intArr = [1,2,3,4,5];matObj.setMat (intArr);%将值设置为内tarrretMat = matObj.getMat(5)显示值
retMat =只读clib.array.matrixlib.Int与属性:尺寸:5可调整大小:0

分享接口

若要与另一个MATLAB用户共享接口,请创建工具箱安装(.mltbx)文件。使用中的说明分发MATLAB接口到c++库

  • 将工具箱文件夹设置为您的matrixlib文件夹,其中包含接口文件matrixlibInterface.so

  • 放置已编译的库文件libmwmatrixOperations.so在同一个文件夹里。

  • 将名称空间(调用语法)标识为clib.matrixlib

另请参阅

相关的话题