主要内容

clibgen.generateLibraryDefinition

创建c++库的定义文件

描述

例子

clibgen.generateLibraryDefinition (InterfaceGenerationFiles“库”,LibraryFiles创建一个MATLAB®Live Code定义文件用来生成一个MATLAB接口,由c++库定义InterfaceGenerationFilesLibraryFiles.例如clibgen.generateLibraryDefinition,参见“您的库中有哪些文件?提示

定义文件的名称为定义库名.mlx.有关使用此文件的详细信息,请参见为c++库定义MATLAB接口.默认情况下,库名中是否指定了第一个文件的名称InterfaceGenerationFiles.如果指定多个接口生成文件,则必须使用PackageName名称-值对的论点。

使用构建方法创建接口。你需要一个matlab支持的c++编万博1manbetx译器。您必须使用与构建c++库相同的编译器来构建接口库。如果您的库完全由源文件定义(不使用共享库文件),那么您可以选择任何受支持的c++编译器来构建接口库。万博1manbetx

例子

clibgen.generateLibraryDefinition (InterfaceGenerationFiles“库”,LibraryFiles“S万博1manbetxupportingSourceFiles”,万博1manbetxSupportingSourceFiles创建由多个头文件、源文件以及(如果需要的话)共享库文件定义的库的定义文件。

例子

clibgen.generateLibraryDefinition (InterfaceGenerationFiles为完全定义的库创建定义文件InterfaceGenerationFiles

如果库包含共享库文件,则必须指定“库”论点。

clibgen.generateLibraryDefinition (InterfaceGenerationFiles___名称,值使用一个或多个名称-值对参数创建文件。将此选项与前面语法中的任何输入参数组合一起使用。

例子

全部折叠

生成库定义文件definematrixOperations.mlxmatrixOperations.hppWindows上的头文件®.对于Linux®的例子,请参阅Linux中的头文件和共享对象文件

headerFile = fullfile (matlabroot,“外来的”“例子”“cpp_interface”“matrixOperations.hpp”);iPath = fullfile (matlabroot,“外来的”“例子”“cpp_interface”);libFile = fullfile (matlabroot,“外来的”“例子”“cpp_interface”...“win64”“mingw64”“matrixOperations.lib”);clibgen.generateLibraryDefinition (headerFile“IncludePath”iPath,“库”libFile)
使用MinGW64编译器(c++)编译器。生成的定义文件definematrixOperations。mlx和数据文件'matrixOperationsData.xml'包含MATLAB支持的10个构造的定义。万博1manbetx构念需要额外的定义。要在接口中包含这些构造,请编辑definematrixOperations.mlx中的定义。构建使用构建(definematrixOperations)。

生成库定义文件definematrixOps.mlxmatrixOperations.hppmatrixOperations.cpp文件。

headerFile = fullfile (matlabroot,“外来的”“例子”“cpp_interface”“matrixOperations.hpp”);源文件= fullfile (matlabroot,“外来的”“例子”“cpp_interface”“matrixOperations.cpp”);iPath = fullfile (matlabroot,“外来的”“例子”“cpp_interface”);clibgen.generateLibraryDefinition (headerFile...“万博1manbetxSupportingSourceFiles”源文件,...“IncludePath”iPath,...“PackageName”“matrixOps”
使用MinGW64编译器(c++)编译器。生成的定义文件definematrixOps。mlx和数据文件'matrixOpsData.xml'包含MATLAB支持的10个构造的定义。万博1manbetx构念需要额外的定义。要在接口中包含这些构造,请编辑definematrixOps.mlx中的定义。构建使用构建(definematrixOps)。

生成库定义文件defineschool.mlxschool.hpp头文件。

headerFile = fullfile (matlabroot,“外来的”“例子”“cpp_interface”“school.hpp”);clibgen.generateLibraryDefinition (headerFile)
使用MinGW64编译器(c++)编译器。生成的定义文件definesschool。mlx和数据文件'schoolData.xml'包含MATLAB支持的21个构造的定义。万博1manbetx构念需要额外的定义。要在接口中包含这些构造,请编辑definesschool .mlx中的定义。构建使用构建(defineschool)。

输入参数

全部折叠

用于生成接口的一个或多个c++文件,指定为字符串数组、字符向量或字符向量的单元数组。如果不在当前文件夹或MATLAB路径中,则名称包括文件的完整或相对路径。

文件指定InterfaceGenerationFiles万博1manbetxSupportingSourceFiles是:

  • 头文件,带有文件扩展名.h. hpp,或.hxx.也支持不带扩展名的头文件。万博1manbetx代码.h头文件必须是c++兼容的C代码。

    如果指定多个接口生成文件,则必须使用PackageName论点。

  • 带有文件扩展名的源代码文件. cpp. cxx

  • 有关更多信息,请参见“您的库中有哪些文件?”提示

这些文件必须包含库导出的所有函数的声明。您应该能够在c++开发环境中编译它们,并在c++应用程序中使用这些功能。如果库完全由头文件定义(仅头文件库),则不需要库文件。

如果主头文件包含# include的头文件,然后使用IncludePath参数指定这些路径。

如果您提供了一个头文件名称,那么MATLAB将在与头文件相同的文件夹中寻找具有相同名称的库。库必须具有特定于平台的文件扩展名。如果库有不同的名称和/或不在同一文件夹中,则使用论点。

MATLAB将接口文件写入当前文件夹中的子文件夹中,除非指定OutputFolder论点。子文件夹的名称是没有文件扩展名的第一个头文件的名称。例如,该语句在子文件夹中创建接口库文件到了头在当前文件夹中。

clibgen.generateLibraryDefinition (“myHeader.hpp”

例子:“sample.hpp”

数据类型:字符|字符串|细胞

一个或多个共享库文件名,指定为字符串数组、字符向量或字符向量的单元格数组。使用“库”名称-值对的论点。属性指定的文件完全定义库时,此值是必需的InterfaceGenerationFiles参数和名称-值对参数“万博1manbetxSupportingSourceFiles”

一个图书馆是下列之一:

  • 在Windows平台上:

    • 对于共享库,请指定. lib导入库文件。

      如果. lib文件不可用,该库被兼容支持万博1manbetx微软®Visual Studio®编译器,然后您可以指定. dll动态链接库文件。例如:

      clibgen.generateLibraryDefinition (“A.hpp”“库”“A.dll”
    • 对于静态库,请指定. lib文件。例如:

      clibgen.generateLibraryDefinition (“A.hpp”“库”“A.lib”
  • 在Linux平台上,指定a所以共享对象文件。

  • macOS平台上,指定一个. dylib动态共享库文件。

例如,这个语句创建definesample.mlx使用myLib.libC: \ myLib \并将其写入当前文件夹。

clibgen.generateLibraryDefinition (“sample.hpp”“库”“C: \ myLib \ myLib.lib”

数据类型:字符|字符串|细胞

一个或多个c++源文件,指定为字符串数组、字符向量或字符向量的单元格数组。使用“万博1manbetxSupportingSourceFiles”名称-值对的论点。万博1manbetx支持的文件扩展名有. cpp. cxx.如果不在当前文件夹或MATLAB路径中,则名称包括文件的完整或相对路径。支持万博1manbetx源文件必须包含c++代码。

有关更多信息,请参见“您的库中有哪些文件?”提示

如果标准库完全由头文件和. cpp源文件,则不需要共享库文件。

例子:“与”

数据类型:字符|字符串|细胞

名称-值参数

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:clibgen.generateLibraryDefinition(“hfile1.hpp”、“hfile2.hpp”,“图书馆”、“hfile1.lib”……
“IncludePath”、“C: \ mylib \包括“,“PackageName”、“mylib”、“OutputFolder”,“C: \工作”,……
“DefinedMacros”(“mymacro1”、“mymacro2 = 0”),“UndefinedMacros”、“mymacro3”);

包含头文件的一个或多个文件夹,指定为字符串数组、字符向量或字符向量的单元格数组。每个值在IncludePath必须是在编译头文件期间包含的文件夹的完整路径名。

如果主头文件包含# include的头文件,然后使用IncludePath参数指定这些路径。

数据类型:字符|字符串|细胞

用于生成定义文件的文件夹名,指定为字符串标量或字符向量。调用之前,请验证文件夹在MATLAB路径上构建函数。这条语句创建definemyHeader.mlxC: \工作

clibgen.generateLibraryDefinition (“myHeader.hpp”“OutputFolder”“C: \工作”

数据类型:字符|字符串|细胞

生成的接口包名称,指定为字符串标量或字符向量。有关更多信息,请参见在c++共享库中调用函数

对于从单个头文件创建的接口,默认值是头文件的名称。对于多个头文件,必须将包名指定为有效的MATLAB名称。例如,这个语句创建definemylib.mlx在当前文件夹中。

clibgen.generateLibraryDefinition ([“h1.hpp”“h2.hpp”],“PackageName”" mylib "

数据类型:字符|字符串|细胞

选项显示生成消息,指定为真正的.如果详细的真正的,然后MATLAB在创建定义文件时将生成消息显示到命令窗口。这条语句创建defineh1.mlx并将消息显示到命令窗口。

clibgen.generateLibraryDefinition (“h1.hpp”“详细”,真正的)

有关更多信息,请参见关于不支持类型的消息万博1manbetx

数据类型:逻辑

对象指针的形状说明符,指定为真正的.如果TreatObjectPointerAsScalar真正的,则MATLAB通过指定将库中的所有对象指针视为标量形状作为1.否则,对象指针的形状是未知的。

介绍了R2019b。

数据类型:逻辑

形状和MATLAB类型说明符常量字符指针,指定为真正的.如果TreatConstCharPointerAsCString真正的,然后MATLAB处理所有常量将标准库中的字符指针指定为以空结尾的C字符串MLTYPE作为字符串形状作为nullTerminated.否则,MATLAB类型和形状常量字符指针未知。万博1manbetx支持的指针类型有:

  • const char *

  • const wchar_t *

  • const char16_t *

  • const char32_t *

数据类型:逻辑

解析头文件时要使用的宏定义列表,指定为空、标量字符串或标量字符串的行向量。宏名由字符1-9、a - z、a - z和'_'组成,且不能以数字开头。

数据类型:字符串

解析头文件时要使用的宏取消列表,指定为空、标量字符串或标量字符串的行向量。宏名由字符1-9、a - z、a - z和'_'组成,且不能以数字开头。

数据类型:字符串

是否从c++文件生成文档,指定为真正的.如果GenerateDocumentationFromHeaderFiles真正的,然后MATLAB从c++文件中的注释生成文档,以便使用MATLAB显示医生命令。如果,则MATLAB忽略c++注释,只生成MATLAB和c++类型映射的文档。

有关更多信息,请参见发布帮助文本的MATLAB接口到c++库

数据类型:逻辑

是否返回指定为的非对象C数组真正的.如果ReturnCArrays真正的,则MATLAB返回C数组(clib.array。*)用于非对象C数组。如果,然后MATLAB为非对象C数组返回数值MATLAB数组。

数据类型:逻辑

是否覆盖指定为的库定义文件真正的.定义文件是这样的定义库名.mlx定义库名.m.集OverwriteExistingDefinitionFiles真正的自动覆盖现有文件。这个选项在创建和修改定义文件时非常有用。

当您使用此选项时,MATLAB将删除文件,包括您可能对文件进行的编辑。

限制

  • 储蓄LibraryDefinition对象definelibName不支持。万博1manbetx

  • 避免在文件夹和文件名中使用非ascii字符,因为某些区域设置可能不支持这些字符。万博1manbetx有关区域设置的信息,请参见国际化的区域设置概念

提示

  • 要重新创建库定义文件,调用clibgen.generateLibraryDefinition与名称-值参数OverwriteExistingDefinitionFiles设置为true。当您使用此选项时,MATLAB将删除文件,包括您可能对文件进行的编辑。

  • 有关故障处理信息,请参见排除c++库定义问题

  • 库可能包含头文件、CPP源文件和共享库文件的组合。该表显示了如何将参数设置为clibgen.generateLibraryDefinition取决于定义库的文件类型。

    你的图书馆里有什么文件?

    论点
    InterfaceGenerationFiles
    名称-值参数
    “库”
    名称-值参数
    “万博1manbetxSupportingSourceFiles”

    Windows上的单个头文件和导入库文件。

    • A.hpp

    • A.lib在文件夹中导入库文件C: \ \ MATLAB \文档

    例子:Windows上的头文件和导入库文件

    “A.hpp”

    “C: \ \ MATLAB \ A.lib文件”

    Linux上的头文件和共享对象文件。

    • A.hpp

    • 那么,在文件夹中~ / MATLAB /

    例子:Linux中的头文件和共享对象文件

    “A.hpp”

    “~ / MATLAB /个。”

    的头文件和动态共享库文件macOS

    • A.hpp

    • A.dylib在文件夹中$ home /文件/ MATLAB

    “A.hpp”

    “$ home /文件/ MATLAB / A.dylib”

    完全由头文件和定义. cpp源文件。没有库文件。

    • 头文件A.hpp

    • 源文件A.cpp

    例子:头和CPP源文件

    “A.hpp”

    “A.cpp”

    多个头文件、一个源文件和一个共享库文件。创建接口命名一个

    • 头文件A.hppB.hpp

    • 源文件A.cpp

    • 共享库文件B.libC: \ \ MATLAB \文档

    [" A.hpp”、“B.hpp”)
    一个

    “C: \ \ MATLAB \ B.lib文件”

    “A.cpp”

    只包括头文件的库。库完全定义在头文件中,没有共享库文件。

    • A.hpp

    例子:只包括头文件进行文件

    “A.hpp”

    标准库完全定义在. cpp文件,且没有共享库文件。

    • A.cpp

    “A.cpp”

    一个因为有多个头文件,所以必须设置“PackageName”名称-值参数。例如,使用名称“一个”.然后当你调用库函数functionname从MATLAB,语法是clib.A。functionname

介绍了R2019a