Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

macOS でのヘッダー ファイルおよび C++ コンパイル済みライブラリ ファイル

この例では、clibPublishInterfaceWorkflow を呼び出すことで macOS 用の C++ ライブラリ matrixOperations に対する MATLAB® インターフェイスを作成する方法について説明します。たとえば、ライブラリはヘッダー ファイル matrixOperations.hpp および動的共有ライブラリ ファイル libmwmatrixOperations.dylib で定義されています。

MATLAB には、次のフォルダーにこれらのファイルが用意されています。

fullfile(matlabroot,"extern","examples","cpp_interface");

このライブラリ用の matrixlib という名前のインターフェイスを作成するには、ワークフロー スクリプト内の各手順 (ライブラリ定義ファイルの生成、不足している構成要素の定義、インターフェイスのビルド、インターフェイスのテスト) に従います。パブリッシュ プロセスを反復する必要がある場合は、追加の手順を実行してパラメーターを復元し、アウトプロセス実行モードを有効にすることができます。その後、パブリッシュされたインターフェイスを他のユーザーに共有できます。

ワークフロー スクリプトの作成

書き込み可能なフォルダーに移動し、clibPublishInterfaceWorkflow を呼び出します。ダイアログ ボックスで、ワークフロー スクリプトの名前 (たとえば、publishmatrixlib.mlx) を指定します。ワークフロー スクリプトには、インターフェイスをパブリッシュできるようにする手順があります。このスクリプトを使用して、インターフェイスをパブリッシュするためのパラメーターを保存します。すべてのプラットフォームで同じスクリプトを使用できます。

メモ

ワークフロー スクリプトにより、複数の MATLAB セッションでインターフェイスを繰り返し生成、定義、ビルド、およびテストできます。ただし、[既存の定義ファイルを上書き] オプションを使用して再作成されたライブラリ定義ファイルへの編集はスクリプトでは保存されません。

手順 1: 生成

まず、ライブラリ定義ファイルを生成します。ワークフロー スクリプトには、この手順用の [C++ インターフェイスの生成] ライブ エディター タスクが含まれています。このタスクを使用して、ライブラリを構成するファイルを選択し、ライブラリ定義ファイルを生成するためのオプションを設定します。

ファイルの選択

ライブラリは matrixOperations.hpp ヘッダー ファイルおよび libmwmatrixOperations.dylib 動的共有ライブラリ ファイルで定義されます。[ライブラリ タイプ]Headers and compiled library files であり、これは既定の設定です。

[ライブラリの起動パス] を設定するには、フォルダー fullfile(matlabroot,"extern","examples","cpp_interface") を参照し、[フォルダーの選択] をクリックします。

ヘッダー ファイルを選択するには、[参照] をクリックしてファイル matrixOperations.hpp を開きます。

ヘッダー ファイルは、cppshrhelp.hpp ヘッダー ファイルに依存しています。[ライブラリの起動パス] のフォルダーに移動し、[フォルダーの選択] をクリックします。

コンパイル済みライブラリ ファイルを選択するには、Intel® 搭載の macOSmaci64 フォルダーを参照し、libmwmatrixOperations.dylib ファイルを開きます。

構成の選択

この例では、[C++ コンパイラ]g++ に設定されています。

[インターフェイス ライブラリ名]matrixlib に変更します。この名前を clib で使用して、MATLAB のライブラリ機能を呼び出します。たとえば、ライブラリ オブジェクト Mat を作成するには、コマンド プロンプトから以下を入力します。

clib.matrixlib.Mat

[出力フォルダー] が書き込み可能なフォルダーであることを確認します。

[既存の定義ファイルを上書き] チェック ボックスを選択し、インターフェイスの開発中に定義ファイルを再作成できるようにします。

定義ファイルの生成

[定義ファイルの生成] をクリックします。スクリプトにより、進行状況が表示され、指定した出力フォルダーにライブラリ定義ファイル definematrixlib.m が作成されます。

Warning: Some C++ language constructs in the files for generating interface file are not supported and not imported.

Using g++ compiler.
Definition file definematrixlib.m contains definitions for 10 constructs supported by MATLAB.
- 5 constructs are fully defined.
- 5 constructs partially defined and commented out.

To include the 5 undefined constructs in the interface, uncomment and complete the definitions in definematrixlib.m.
To build the interface, call build(definematrixlib).
MATLAB Interface to matrixlib Library

Class clib.matrixlib.Mat

  Constructors:
    clib.matrixlib.Mat(clib.matrixlib.Mat)
    clib.matrixlib.Mat()

  Methods:
    uint64 getLength()
    
  No Properties defined

Functions
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)

複数のセッションをまたいだ開発用ツールの有効化

インターフェイスのパブリッシュ中は、手順を繰り返したり、publishmatrixlib.mlx スクリプトを閉じてから再び開いたり、MATLAB を再起動したりすることができます。以下のセクションの手順に従うと、該当するワークフローで役立ちます。

  • MATLAB セッション間でワークスペース変数を保持します。[Restore library definition] セクションで、変数 outputFolderPath[出力フォルダー] パラメーターの値に設定します。変数 libraryNameForInterface[インターフェイス ライブラリ名] パラメーター matrixlib に設定します。次に、セクションを実行します。詳細については、Restore Library Definitionを参照してください。

  • [Enable out-of-process execution mode] セクションの実行を検討します。インターフェイスの開発時にこのモードを使用すると、テスト中に MATLAB を再起動する必要がなくなります。ライブラリ内の機能を呼び出した後に、[Unload out-of-process library] セクションを実行してライブラリをアンロードできます。詳細については、アウトプロセスの C++ ライブラリの読み込みを参照してください。

手順 2: 定義

ライブラリ定義ファイルを作成したときに、5 つの構成要素について、それらの定義が完全でないと MATLAB から報告されました。機能を完全に定義するには、definematrixlib.m ファイルを編集します。ファイルを編集するには、[DEFINE] セクションを実行します。

ライブラリ定義ファイルをスクロールし、それらの構成要素についてのコメント化されたコードのブロックを探します。MATLAB では、以下の関数で使用される引数のサイズを自動的に判別できません。

  • setMat — クラス Mat の C++ メソッド

  • getMat — クラス Mat の C++ メソッド

  • copyMat — クラス Mat の C++ メソッド

  • addMat — C++ パッケージ関数

  • updateMatBySize — C++ パッケージ関数

matrixOperations ライブラリのドキュメンテーションに基づいて、引数の定義ステートメントで <SHAPE> の値を指定できます。詳細については、Define Missing SHAPE Parameterを参照してください。

  1. それぞれの構成要素について、定義ステートメントのコメントを解除します。

  2. <SHAPE> の引数を次の値に置き換えます。

    構成要素

    引数の名前

    引数の C++ 定義

    説明

    <SHAPE> と置き換える値

    setMatsrcint [] src

    行列の長さを入力引数 len で定義します。

    "len"
    getMatRetValint const *

    出力引数の長さを入力引数 len で定義します。

    "len"
    copyMatdestint * dest

    長さ dest を入力引数 len で定義します。

    "len"
    addMatmatMat const * mat

    関数で単一の mat 引数を受け取ります。

    1
    updateMatBySizearrint * arr

    長さ arr を入力引数 len で定義します。

    "len"
  3. 定義ファイルを保存して閉じます。

  4. ファイルで行った編集を検証するには、[Confirm edits and run summary] セクションを実行します。報告されたエラーをファイルで修正します。関数 summary により、インターフェイスに setMatgetMatcopyMataddMat、および updateMatBySize が含まれるようになっていることが示されます。

MATLAB Interface to matrixlib Library

Class clib.matrixlib.Mat

  Constructors:
    clib.matrixlib.Mat(clib.matrixlib.Mat)
    clib.matrixlib.Mat()

  Methods:
    setMat(clib.array.matrixlib.Int)
    clib.array.matrixlib.Int getMat(uint64)
    uint64 getLength()
    copyMat(clib.array.matrixlib.Int)

  No Properties defined

Functions
int32 clib.matrixlib.addMat(clib.matrixlib.Mat)
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)
clib.matrixlib.updateMatBySize(clib.matrixlib.Mat,clib.array.matrixlib.Int)

手順 3: ビルド

ライブラリに対する matrixlib インターフェイスをビルドするには、スクリプトの [BUILD] セクションを実行します。

Building interface file 'matrixlibInterface.dylib' for clib package 'matrixlib'.
Interface file 'matrixlibInterface.dylib' built in folder '/home/Documents/MATLAB/matrixlib'.

To use the library, add the interface file folder to the MATLAB path.
addpath('/home/Documents/MATLAB/matrixlib')

メモ

生成、定義、ビルドの手順は繰り返し実行できます。ただし、ライブラリのヘルプを表示するか関数を呼び出した後は、同じ MATLAB セッションで definematrixlib 定義ファイルを更新することはできなくなります。MATLAB を再起動するか、[構成の選択] セクションの [インターフェイス ライブラリ名] パラメーターを変更して新しい定義ファイルを作成します。

手順 4: テスト

実行時ライブラリの設定およびコピー

[Set up and copy run-time libraries] セクションを実行します。このライブラリには追加の実行時の依存関係はないため、コマンドを変更する必要はありません。

アウトプロセス実行モードの有効化

定義ファイルを変更する必要がある場合は、このコマンドを実行して、アウトプロセスでインターフェイス ライブラリを呼び出す機能を設定し、MATLAB を再起動しなくて済むようにします。詳細については、インプロセスまたはアウトプロセスでの C++ ライブラリの読み込みを参照してください。

インターフェイス ライブラリのヘルプの呼び出し

インターフェイス ライブラリのヘルプを表示するには、[Call help on interface library] セクションを実行します。

インターフェイス ライブラリを呼び出してテストするコードの記述

[Write code to call and test interface library] のコード セクションを使用して、以下のテストを記述します。

matObj = clib.matrixlib.Mat;   % Create a Mat object
intArr = [1,2,3,4,5];
matObj.setMat(intArr);     % Set the values to intArr
retMat = matObj.getMat(5)  % Display the values
retMat = 

  read-only clib.array.matrixlib.Int with properties:

    Dimensions: 5
     Resizable: 0

インターフェイスの共有

インターフェイスを別の MATLAB ユーザーに共有するには、ツールボックス インストール (.mltbx) ファイルを作成します。Distribute MATLAB Interface to C++ Libraryの手順を使用して以下を実行します。

  • ツールボックス フォルダーを、インターフェイス ファイル matrixlibInterface.dylib が含まれている matrixlib フォルダーに設定します。

  • 同じフォルダー内に、コンパイル済みライブラリ ファイル libmwmatrixOperations.dylib を配置します。

  • 名前空間 (呼び出し構文) を clib.matrixlib として識別します。

参考

関連するトピック