このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Linux でのヘッダー ファイルおよび C++ コンパイル済みライブラリ ファイル
この例では、clibPublishInterfaceWorkflow
を呼び出すことで Linux® 用の C++ ライブラリ matrixOperations
に対する MATLAB® インターフェイスを作成する方法について説明します。この例では、ライブラリはヘッダー ファイル matrixOperations.hpp
および共有オブジェクト ファイル libmwmatrixOperations.so
で定義されています。
MATLAB には、次のフォルダーにこれらのファイルが用意されています。
fullfile(matlabroot,"extern","examples","cpp_interface");
このライブラリ用の matrixlib
という名前のインターフェイスを作成するには、ワークフロー スクリプト内の各手順 (ライブラリ定義ファイルの生成、不足している構成要素の定義、インターフェイスのビルド、インターフェイスのテスト) に従います。パブリッシュ プロセスを反復する必要がある場合は、追加の手順を実行してパラメーターを復元し、アウトプロセス実行モードを有効にすることができます。その後、パブリッシュされたインターフェイスを他のユーザーに共有できます。
ワークフロー スクリプトの作成
書き込み可能なフォルダーに移動し、clibPublishInterfaceWorkflow
を呼び出します。ダイアログ ボックスで、ワークフロー スクリプトの名前 (たとえば、publishmatrixlib.mlx
) を指定します。ワークフロー スクリプトには、インターフェイスをパブリッシュできるようにする手順があります。このスクリプトを使用して、インターフェイスをパブリッシュするためのパラメーターを保存します。すべてのプラットフォームで同じスクリプトを使用できます。
メモ
ワークフロー スクリプトにより、複数の MATLAB セッションでインターフェイスを繰り返し生成、定義、ビルド、およびテストできます。ただし、[既存の定義ファイルを上書き] オプションを使用して再作成されたライブラリ定義ファイルへの編集はスクリプトでは保存されません。
手順 1: 生成
まず、ライブラリ定義ファイルを生成します。ワークフロー スクリプトには、この手順用の [C++ インターフェイスの生成] ライブ エディター タスクが含まれています。このタスクを使用して、ライブラリを構成するファイルを選択し、ライブラリ定義ファイルを生成するためのオプションを設定します。
ファイルの選択
ライブラリは matrixOperations.hpp
ヘッダー ファイルおよび libmwmatrixOperations.so
共有オブジェクト ファイルで定義されます。[ライブラリ タイプ] は Headers and compiled library files
であり、これは既定の設定です。
[ライブラリの起動パス] を設定するには、フォルダー fullfile(matlabroot,"extern","examples","cpp_interface")
を参照し、[フォルダーの選択] をクリックします。
ヘッダー ファイルを選択するには、[参照] をクリックしてファイル matrixOperations.hpp
を開きます。
ヘッダー ファイルは、cppshrhelp.hpp
ヘッダー ファイルに依存しています。[ライブラリの起動パス] のフォルダーに移動し、[フォルダーの選択] をクリックします。
コンパイル済みライブラリ ファイルを選択するには、glnxa64
フォルダーを参照し、libmwmatrixOperations.so
ファイルを開きます。
構成の選択
この例では、[C++ コンパイラ] は g++
に設定されています。
[インターフェイス ライブラリ名] を matrixlib
に変更します。この名前を clib
で使用して、MATLAB の機能を呼び出します。たとえば、ライブラリ オブジェクト Mat
を作成するには、コマンド プロンプトから以下を入力します。
clib.matrixlib.Mat
[出力フォルダー] が書き込み可能なフォルダーであることを確認します。
[既存の定義ファイルを上書き] チェック ボックスを選択し、インターフェイスの開発中に定義ファイルを再作成できるようにします。
オプションの C++ ライブラリ設定の指定
このライブラリへのインターフェイスのビルドには、オプションの C++ ライブラリ設定は不要です。
オプションの定義構成の指定
このライブラリへのインターフェイスのビルドには、オプションの定義構成は不要です。
結果の表示
既定では、定義ファイルを生成すると、関数により、使用可能な構成要素 (ライブラリ内のクラスおよび関数) が表示されます。インターフェイスの開発中は、[使用できない構造の表示] チェック ボックスも選択すると、含めるために追加情報を必要とする可能性のある構成要素を確認できます。
定義ファイルの生成
[定義ファイルの生成] をクリックします。スクリプトにより、進行状況が表示され、指定した出力フォルダーにライブラリ定義ファイル 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を参照してください。
それぞれの構成要素について、定義ステートメントのコメントを解除します。
<SHAPE>
の引数を次の値に置き換えます。構成要素
引数の名前
引数の C++ 定義
説明
<SHAPE>
と置き換える値setMat
src
int [] src
行列の長さを入力引数
len
で定義します。"len"
getMat
RetVal
int const *
出力引数の長さを入力引数
len
で定義します。"len"
copyMat
dest
int * dest
長さ
dest
を入力引数len
で定義します。"len"
addMat
mat
Mat const * mat
関数で単一の
mat
引数を受け取ります。1
updateMatBySize
arr
int * arr
長さ
arr
を入力引数len
で定義します。"len"
定義ファイルを保存して閉じます。
ファイルで行った編集を検証するには、[Confirm edits and run summary] セクションを実行します。報告されたエラーをファイルで修正します。関数
summary
により、インターフェイスにsetMat
、getMat
、copyMat
、addMat
、および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.so' for clib package 'matrixlib'. Interface file 'matrixlibInterface.so' 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.so
が含まれているmatrixlib
フォルダーに設定します。同じフォルダー内に、コンパイル済みライブラリ ファイル
libmwmatrixOperations.so
を配置します。名前空間 (呼び出し構文) を
clib.matrixlib
として識別します。