MATLAB Compiler の制限
このトピックでは、パッケージ化の制限やその他の制約を含め、 MATLAB® Compiler™ および MATLAB Runtime を使用する際に考慮すべき制限について説明します。
MATLAB Compiler の制限の完全なリストは、https://www.mathworks.com/products/compiler/compiler_support.html を参照してください。
MATLAB とツールボックスのパッケージ化
MATLAB Compiler は、MATLAB を基盤とするほぼすべての MATLAB 言語およびツールボックスをサポートします。ただし、以下は除きます。
MATLAB とコンパニオン ツールボックスに含まれる、あらかじめビルドされたほとんどのグラフィカル ユーザー インターフェイス
コマンド ラインから直接呼び出すことができない機能
MATLAB Compiler でサポートされていない関数のリストについては、MATLAB Compiler と MATLAB Compiler SDK でのコンパイルでサポートされていない関数を参照してください。
コンパイルされたアプリケーションは、MATLAB が実行されているオペレーティング システムでのみ実行できます。また、MATLAB Runtime は MATLAB とほぼ同じサイズであるため、MATLAB Compiler でビルドされたアプリケーションが稼働するには特定のストレージ メモリと RAM が必要です。システム要件に関する最新情報については、MATLAB システム要件を参照してください。
マルチプラットフォーム デプロイのガイドラインについては、Ensure Multiplatform Portability for Compiled Applications (MATLAB Compiler SDK)を参照してください。
MATLAB Compiler により生成されたコンポーネント
MATLAB Compiler SDK™ または MATLAB Compiler により生成されたコンポーネントは、MATLAB Runtime でのデプロイを目的としており、MATLAB で直接使用することはできません。生成されたスタンドアロン アプリケーションは、system コマンドまたは感嘆符演算子を使用して、MATLAB でテストできます。MATLAB でアプリケーションをテストする方法の詳細については、Set MATLAB Library Paths for Testing Deployed Applicationsを参照してください。
MATLAB Compiler で以前のニューラル ネットワークはデプロイできない
以前のバージョンの Deep Learning Toolbox™ を使用して作成されたニューラル ネットワークを読み込むには、MATLAB Compiler ではデプロイできない初期化ルーチンが必要になります。そのため、デプロイする前にまずネットワークを更新する必要があります。
たとえば、Deep Learning Toolbox Version 5.0.1 (2006b) と MATLAB Compiler Version 4.5 (R2006b) を使用して作成したネットワークをデプロイすると、実行時に以下のエラーが表示されます。
??? Error using ==> network.subsasgn
"layers{1}.initFcn" cannot be set to non-existing
function "initwb".
Error in ==> updatenet at 40
Error in ==> network.loadobj at 10
??? Undefined function or method 'sim' for input
arguments of type 'struct'.
Error in ==> mynetworkapp at 30並列プールに関する制限
共有の MATLAB Runtime インスタンスまたはシングルトン ランタイムを使用するデプロイ済みアプリケーションでは、複数の並列プールを使用できません。複数の並列プールを使用するには、複数の MATLAB Runtime プロセスを作成するようにコードをリファクタリングしてください。
MATLABApplicationMode::OUT_OF_PROCESS モードで実行される MATLAB データ API インターフェイスを使用する MATLAB Compiler SDK C++ 共有ライブラリでは、Parallel Computing Toolbox™ の機能はサポートされていません。
パッケージ モードで複数の引数をもつ PRINTDLG の呼び出し制限
コードがデプロイ モードで実行される場合、MATLAB の printdlg 関数の呼び出しには引数を 1 つのみ指定できます (たとえば printdlg(gcf))。
MATLAB で printdlg を複数の引数で呼び出しても、エラーは表示されません。ただし、複数の引数呼び出しをもつコンパイル済みアプリケーションをデプロイすると、その処理は失敗し、エラー メッセージが表示されます。
Error using = => printdlg at 11 PRINTDLG requires exactly one argument
which および open を使用してファイルを開くときに現在の作業フォルダーが検索されない
次の例のように which 関数を使用すると、デプロイされたアプリケーションで現在のフォルダーは検索されません。さらに、この関数を使用すると、open 関数の動作が予測不能になる可能性があります。
function pathtest
which myFile.mat
open('myFile.mat') 代わりに、以下のいずれかの方法を使用してください。
loadまたは特定の関数を特定のファイル タイプに使用します。loadは、現在のフォルダーのファイルを明示的にチェックします。load myFile.mat
関数
ctfrootを使用して、デプロイ可能なアーカイブを基準としたファイルの場所を明示的に指定します。load(fullfile(ctfroot,'..','datafiles','data1.mat'));
次のいずれかのオプションを使用してファイルを含めます。[コンパイラ] アプリの [アプリケーションの実行に必要なファイル] 領域、
compiler.build関数のAdditionalFilesオプション、またはmccの-aフラグ。その後、関数whichを使用してファイルを特定できます。
アプリケーションにデータ ファイルを含める方法の詳細については、パッケージ化されたアプリケーションでのファイルの追加とアクセスを参照してください。
UNIX システム上の警告の抑制
UNIX® システム上でスタンドアロン アプリケーションを実行するときに、いくつかの警告が表示される場合があります。
libjvm.so 警告を抑制するには、プラットフォームに適切なダイナミック ライブラリ パスを設定します。詳細については、デプロイ用の MATLAB Runtime ライブラリ パスの設定を参照してください。
また、Java® を使用せずにアプリケーションを実行できる場合は、コンパイラのオプション -R -nojvm を使用してアプリケーションの nojvm ランタイム オプションを設定できます。
アプリケーションにグラフィックスが含まれており、-nojvm オプションを使用してそれをコンパイルすると、ランタイム エラーが発生します。
パッケージ化された関数の MATLAB ファイル ヘルプがない
説明コメントによるオンライン ヘルプを備えた MATLAB 関数を作成してパッケージ化した場合、次のコマンドの結果は判読できなくなります。
help filename
メモ
パフォーマンス上の理由により、MATLAB ファイルのコメントは MATLAB Runtime 用の暗号化処理の前に削除されます。
C++ SetData を使用した mwArray の動的なサイズ変更
C++ の SetData メソッドを使用して、mwArray を動的にサイズ変更することはできません。
たとえば、次の配列を使用して作業している場合、SetData を使用して配列のサイズを 5 つの要素の長さに増加させることはできません。
[1 2 3 4]
パッケージ化に使用可能なファイル タイプ
次の表に、デプロイ アプリを使用するパッケージ化で有効なファイル タイプと無効なファイル タイプを一覧表示します。
| ターゲット アプリケーション | 有効なファイルのタイプ | 無効なファイルのタイプ |
|---|---|---|
スタンドアロン アプリケーション | MATLAB MEX ファイル、MATLAB スクリプト、MATLAB 関数、および MATLAB クラス ファイル。これらのファイルには単一のエントリ ポイントが必要です。 | 保護された関数ファイル ( |
C/C++ 共有ライブラリ、.NET アセンブリ、Java クラス、Python® パッケージ、および COM コンポーネント | MATLAB MEX ファイル、MATLAB 関数、および MATLAB クラス ファイル。これらのファイルには単一のエントリ ポイントが必要です。 | MATLAB スクリプト、保護された関数ファイル ( |
MATLAB Production Server アーカイブ | MATLAB MEX ファイルおよび MATLAB 関数。これらのファイルには単一のエントリ ポイントが必要です。 | MATLAB スクリプト、MATLAB クラス ファイル、保護された関数ファイル ( |
データ ファイルなど、他のタイプのファイルをパッケージ化されたコード アーカイブに追加できます。詳細については、パッケージ化されたアプリケーションでのファイルの追加とアクセスを参照してください。