Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

clibgen.generateLibraryDefinition

C++ ライブラリの定義ファイルを作成

説明

clibgen.generateLibraryDefinition(InterfaceGenerationFiles,'Libraries',LibraryFiles) は、InterfaceGenerationFiles および LibraryFiles で定義された C++ ライブラリへの MATLAB® インターフェイスの生成に使用する MATLAB ライブ コード定義ファイルを作成します。clibgen.generateLibraryDefinition の呼び出しの例については、ヒントの「ライブラリに含めるファイル」を参照してください。

定義ファイルの名前は definelibName.mlx です。このファイルの使用方法の詳細については、C++ ライブラリに対する MATLAB インターフェイスの定義を参照してください。既定の設定では、libNameInterfaceGenerationFiles で指定した最初のファイルの名前です。インターフェイス生成ファイルを複数指定する場合は、名前と値のペアの引数 PackageName を使用する必要があります。

インターフェイスを作成するには、build メソッドを使用します。MATLAB でサポートされる C++ コンパイラが必要です。C++ ライブラリのビルドに使用したものと同じコンパイラを使って、インターフェイス ライブラリをビルドしなければなりません。ライブラリがソース ファイルで完全に定義される場合 (共有ライブラリ ファイルを使用しない場合)、サポートされている任意の C++ コンパイラを選択してインターフェイス ライブラリをビルドできます。

clibgen.generateLibraryDefinition(InterfaceGenerationFiles,'Libraries',LibraryFiles,'SupportingSourceFiles',SupportingSourceFiles) は、複数のヘッダー ファイル、ソース ファイル、および必要な場合は共有ライブラリ ファイルで定義されるライブラリに対する定義ファイルを作成します。

clibgen.generateLibraryDefinition(InterfaceGenerationFiles) は、InterfaceGenerationFiles で完全に定義されるライブラリに対する定義ファイルを作成します。

ライブラリに共有ライブラリ ファイルが含まれている場合、'Libraries' 引数を指定しなければなりません。

clibgen.generateLibraryDefinition(InterfaceGenerationFiles,___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用してファイルを作成します。このオプションは、前述の構文のすべての入力引数の組み合わせで使用できます。

すべて折りたたむ

Windows®matrixOperations.hpp ヘッダー ファイルからライブラリ定義ファイル definematrixOperations.mlx を生成します。Linux® の例については、Linux のヘッダー ファイルと共有オブジェクト ファイルを参照してください。

headerFile = fullfile(matlabroot,"extern","examples","cpp_interface","matrixOperations.hpp");
iPath = fullfile(matlabroot,"extern","examples","cpp_interface");
libFile = fullfile(matlabroot,"extern","examples","cpp_interface",...
    "win64","mingw64","matrixOperations.lib");

clibgen.generateLibraryDefinition(headerFile,"IncludePath", iPath,"Libraries", libFile)
Using MinGW64 Compiler (C++) compiler.
Generated definition file definematrixOperations.mlx and data file 'matrixOperationsData.xml' 
contain definitions for 10 constructs supported by MATLAB.
5 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in definematrixOperations.mlx.
Build using build(definematrixOperations).

matrixOperations.hpp ファイルと matrixOperations.cpp ファイルからライブラリ定義ファイル definematrixOps.mlx を生成します。

headerFile = fullfile(matlabroot,"extern","examples","cpp_interface","matrixOperations.hpp");
sourceFile = fullfile(matlabroot,"extern","examples","cpp_interface","matrixOperations.cpp");
iPath = fullfile(matlabroot,"extern","examples","cpp_interface");

clibgen.generateLibraryDefinition(headerFile,...
    "SupportingSourceFiles",sourceFile,...
    "IncludePath", iPath,...
    "PackageName","matrixOps")
Using MinGW64 Compiler (C++) compiler.
Generated definition file definematrixOps.mlx and data file 'matrixOpsData.xml' 
contain definitions for 10 constructs supported by MATLAB.
5 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in definematrixOps.mlx.
Build using build(definematrixOps).

school.hpp ヘッダー ファイルからライブラリ定義ファイル defineschool.mlx を生成します。

headerFile = fullfile(matlabroot,"extern","examples","cpp_interface","school.hpp");
clibgen.generateLibraryDefinition(headerFile)
Using MinGW64 Compiler (C++) compiler.
Generated definition file defineschool.mlx and data file 'schoolData.xml' contain definitions for 
21 constructs supported by MATLAB.
1 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in defineschool.mlx.
Build using build(defineschool).

入力引数

すべて折りたたむ

インターフェイスを生成するための 1 つ以上の C++ ファイル。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。現在のフォルダーまたは MATLAB のパスにない場合、名前にはファイルの絶対パスまたは相対パスが含まれます。

InterfaceGenerationFiles およびSupportingSourceFilesを指定するファイルは次のとおりです。

  • ヘッダー ファイル。ファイル拡張子は .h.hpp、または .hxx です。拡張子のないヘッダー ファイルもサポートされます。.h ヘッダー ファイルのコードは C++ と互換性のある C コードでなければなりません。

    インターフェイス生成ファイルを複数指定する場合は、PackageName 引数を使用する必要があります。

  • ソース コード ファイル。ファイル拡張子は .cpp または .cxx です。

  • 詳細については、ヒントの「What files do you have in your library?」を参照してください。

これらのファイルには、ライブラリによってエクスポートされたすべての関数の宣言を含めなければなりません。これらを C++ 開発環境でコンパイルし、その機能を C++ アプリケーションで使用できなければなりません。ライブラリがヘッダー ファイル (ヘッダーのみのライブラリ) で完全に定義される場合、ライブラリ ファイルは必要ありません。

さまざまなフォルダー内のヘッダー ファイルの #include ステートメントがメイン ヘッダー ファイルに含まれている場合は、IncludePath 引数を使用してこれらのパスを指定します。

1 つのヘッダー ファイル名を指定した場合、MATLAB は、そのヘッダー ファイルと同じフォルダーで同じ名前のライブラリを探します。ライブラリにはプラットフォーム固有のファイル名の拡張子がなければなりません。ライブラリに異なる名前がある場合、または同じフォルダーにない場合、Libraries 引数を使用します。

MATLAB は、インターフェイス ファイルを現在のフォルダーのサブフォルダーに書き込みます。ただし、OutputFolder 引数を指定する場合を除きます。このサブフォルダーの名前は、最初のヘッダー ファイルの名前からファイル拡張子を除いたものです。たとえば、このステートメントは現在のフォルダーのサブフォルダー myHeader でインターフェイス ライブラリ ファイルを作成します。

clibgen.generateLibraryDefinition("myHeader.hpp")

例: "sample.hpp"

データ型: char | string | cell

1 つ以上の共有ライブラリ ファイル名。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。名前と値のペアの引数 'Libraries' と共に使用します。引数 InterfaceGenerationFiles および名前と値のペアの引数 'SupportingSourceFiles' で指定されたファイルでライブラリが完全に定義される場合を除き、この値は必須です。

ライブラリは次のいずれかです。

  • Windows プラットフォームの場合:

    • 共有ライブラリの場合は .lib インポート ライブラリ ファイルを指定します。

      .lib ファイルを使用できない場合、サポートされている Microsoft® Visual Studio® コンパイラでライブラリがコンパイルされていれば、.dll ダイナミックリンク ライブラリ ファイルを指定できます。次に例を示します。

      clibgen.generateLibraryDefinition("A.hpp","Libraries","A.dll")
    • スタティック ライブラリの場合は .lib ファイルを指定します。次に例を示します。

      clibgen.generateLibraryDefinition("A.hpp","Libraries","A.lib")
  • Linux プラットフォームの場合、.so 共有オブジェクト ファイルを指定します。

  • macOS プラットフォームの場合、.dylib ダイナミック共有ライブラリ ファイルを指定します。

たとえば、このステートメントは、myLib.lib を使用して、C:\myLib\definesample.mlx を作成し、現在のフォルダーに書き込みます。

clibgen.generateLibraryDefinition("sample.hpp","Libraries","C:\myLib\myLib.lib")

データ型: char | string | cell

1 つ以上の C++ ソース ファイル。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。名前と値のペアの引数 'SupportingSourceFiles' と共に使用します。サポートされているファイル ファイル拡張子は .cpp.cxx です。現在のフォルダーまたは MATLAB のパスにない場合、名前にはファイルの絶対パスまたは相対パスが含まれます。サポート ソース ファイルには C++ コードが含まれていなければなりません。

詳細については、ヒントの「What files do you have in your library?」を参照してください。

ライブラリがヘッダー ファイルまたは .cpp ソース ファイルにより完全に定義されている場合、共有ライブラリ ファイルは必要ありません。

例: "sample.cpp"

データ型: char | string | cell

名前と値の引数

例: clibgen.generateLibraryDefinition(["hfile1.hpp","hfile2.hpp"],"Libraries","hfile1.lib",...
"IncludePath","C:\mylib\include","PackageName","mylib","OutputFolder","C:\work",...
"DefinedMacros",["mymacro1","mymacro2=0"],"UndefinedMacros","mymacro3");

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

含まれるヘッダー ファイルの 1 つ以上のフォルダー。string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。IncludePath の各値は、ヘッダー ファイルのコンパイル中に含めるフォルダーへの絶対パス名でなければなりません。

さまざまなフォルダー内のヘッダー ファイルの #include ステートメントがメイン ヘッダー ファイルに含まれている場合は、IncludePath 引数を使用してこれらのパスを指定します。

データ型: char | string | cell

定義ファイルの生成に使用するフォルダー名。string スカラーまたは文字ベクトルとして指定します。関数 build を呼び出す前に、フォルダーが MATLAB パス上にあることを確認します。次のステートメントは definemyHeader.mlxC:\work に作成します。

clibgen.generateLibraryDefinition("myHeader.hpp","OutputFolder","C:\work")

データ型: char | string | cell

生成されたインターフェイス パッケージ名。string スカラーまたは文字ベクトルとして指定します。詳細については、C++ 共有ライブラリの関数の呼び出しを参照してください。

1 つのヘッダー ファイルから作成されたインターフェイスの場合、既定値はヘッダー名です。複数のヘッダー ファイルの場合は、パッケージ名を有効な MATLAB 名として指定しなければなりません。たとえば、次のステートメントは現在のフォルダーに definemylib.mlx を作成します。

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

データ型: char | string | cell

生成メッセージの表示オプション。true または false として指定します。Verbosetrue の場合、MATLAB は定義ファイルの作成中に生成メッセージをコマンド ウィンドウに表示します。このステートメントは defineh1.mlx を作成し、メッセージをコマンド ウィンドウに表示します。

clibgen.generateLibraryDefinition("h1.hpp","Verbose",true)

詳細については、サポートされていない型についてのメッセージを参照してください。

データ型: logical

オブジェクト ポインターの形状指定子。true または false として指定します。TreatObjectPointerAsScalartrue の場合、MATLAB は SHAPE1 として指定してライブラリ内のすべてのオブジェクト ポインターをスカラーとして扱います。それ以外の場合、オブジェクト ポインターの形状は不明です。

R2019b で導入されました。

データ型: logical

const 文字ポインターの形状と MATLAB 型指定子。true または false として指定します。TreatConstCharPointerAsCStringtrue の場合、MATLAB は MLTYPEstringSHAPEnullTerminated として指定し、ライブラリ内のすべての const 文字ポインターを null で終了する C の文字列として扱います。それ以外の場合、MATLAB 型および const 文字ポインターの形状は不明です。サポートされているポインターの型は次のとおりです。

  • const char *

  • const wchar_t *

  • const char16_t *

  • const char32_t *

データ型: logical

ヘッダー ファイルを解析する際に使用するマクロ定義のリスト。空、スカラー string、またはスカラー string の行ベクトルとして指定します。マクロ名には 1 ~ 9、a ~ z、A ~ Z、および '_' の文字が含まれ、先頭を数字にすることはできません。

データ型: string

ヘッダー ファイルを解析する際に使用するマクロのキャンセルのリスト。空、スカラー string、またはスカラー string の行ベクトルとして指定します。マクロ名には 1 ~ 9、a ~ z、A ~ Z、および '_' の文字が含まれ、先頭を数字にすることはできません。

データ型: string

C++ ファイルからドキュメンテーションを生成するかどうか。true または false として指定します。GenerateDocumentationFromHeaderFilestrue の場合、MATLAB は MATLAB doc コマンドを使用して C++ ファイルのコメントから表示用のドキュメンテーションを生成します。false の場合、MATLAB は C++ コメントを無視し、MATLAB のドキュメンテーションおよび C++ 型のマッピングのみを生成します。

詳細については、C++ ライブラリに対する MATLAB インターフェイスのヘルプ テキストのパブリッシュを参照してください。

データ型: logical

非オブジェクト C 配列を返すかどうか。true または false として指定します。ReturnCArraystrue の場合、MATLAB は非オブジェクト C 配列の C 配列 (clib.array.*) を返します。false の場合、MATLAB は非オブジェクト C 配列の数値の MATLAB 配列を返します。

データ型: logical

ライブラリ定義ファイルを上書きするかどうか。true または false として指定します。定義ファイルの形式は definelibName.mlx または definelibname.m です。OverwriteExistingDefinitionFilestrue に設定すると、既存のファイルが自動的に上書きされます。このオプションは、定義ファイルを作成および変更する場合に便利です。

このオプションを使用すると、MATLAB により、ファイルがそれらのファイルに対して行った編集も含めて削除されます。

制限

  • LibraryDefinition オブジェクト definelibName を MAT ファイルに保存することはサポートされていません。

  • 一部のロケール設定では非 ASCII 文字がサポートされていない場合があるため、フォルダー名とファイル名にはこれらの文字を使用しないでください。ロケールの詳細については、国際化に向けたロケール設定の概念を参照してください。

ヒント

  • ライブラリ定義ファイルを作成し直すには、名前と値の引数 OverwriteExistingDefinitionFiles を true に設定して clibgen.generateLibraryDefinition を呼び出します。このオプションを使用すると、MATLAB により、ファイルがそれらのファイルに対して行った編集も含めて削除されます。

  • トラブルシューティングの詳細については、Troubleshooting C++ Library Definition Issuesを参照してください。

  • ライブラリにヘッダー ファイル、CPP ソース ファイル、および共有ライブラリ ファイルの組み合わせが含まれる場合があります。次の表に、ライブラリを定義するファイルの種類に応じた clibgen.generateLibraryDefinition の引数の設定方法を示します。

    ライブラリに含めるファイル

    引数
    InterfaceGenerationFiles
    名前と値の引数
    "Libraries"
    名前と値の引数
    "SupportingSourceFiles"

    Windows の単一のヘッダー ファイルとインポート ライブラリ ファイル。

    • A.hpp

    • フォルダー C:\Documents\MATLAB\ にある A.lib インポート ライブラリ ファイル

    例: Header File and Import Library File on Windows

    "A.hpp"

    "C:\Documents\MATLAB\A.lib"

     

    Linux のヘッダー ファイルと共有オブジェクト ファイル。

    • A.hpp

    • フォルダー ~/MATLAB/ にある A.so

    例: Linux のヘッダー ファイルと共有オブジェクト ファイル

    "A.hpp"

    "~/MATLAB/A.so"

     

    macOS のヘッダー ファイルとダイナミック共有ライブラリ ファイル。

    • A.hpp

    • フォルダー $home/Documents/MATLAB にある A.dylib

    "A.hpp"

    "$home/Documents/MATLAB/A.dylib"

     

    ヘッダー ファイルと .cpp ソース ファイルで完全に定義。ライブラリ ファイルなし。

    • ヘッダー ファイル A.hpp

    • ソース ファイル A.cpp

    例: ヘッダーと CPP のソース ファイル

    "A.hpp"

     

    "A.cpp"

    複数のヘッダー ファイルとソース ファイルおよび共有ライブラリ ファイル。A という名前のインターフェイスを作成。

    • ヘッダー ファイル A.hpp および B.hpp

    • ソース ファイル A.cpp

    • C:\Documents\MATLAB\ にある共有ライブラリ ファイル B.lib

    ["A.hpp","B.hpp"]
    a

    "C:\Documents\MATLAB\B.lib"

    "A.cpp"

    ヘッダーのみのライブラリ。ライブラリがヘッダー ファイルで完全に定義され、共有ライブラリ ファイルがない。

    • A.hpp

    例: ヘッダー専用の HPP ファイル

    "A.hpp"

      

    ライブラリが .CPP ファイルで完全に定義され、共有ライブラリ ファイルがない。

    • A.cpp

    "A.cpp"

      

    a Because you have multiple header files, you must set the "PackageName" name-value argument. For example, use the name "A". Then when you call library function functionname from MATLAB, the syntax is clib.A.functionname.

バージョン履歴

R2019a で導入