メインコンテンツ

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 クラス ファイル。これらのファイルには単一のエントリ ポイントが必要です。

保護された関数ファイル (.p ファイル)、Java 関数、COM または .NET コンポーネント、およびデータ ファイル。

C/C++ 共有ライブラリ、.NET アセンブリ、Java クラス、Python® パッケージ、および COM コンポーネント

MATLAB MEX ファイル、MATLAB 関数、および MATLAB クラス ファイル。これらのファイルには単一のエントリ ポイントが必要です。

MATLAB スクリプト、保護された関数ファイル (.p ファイル)、Java 関数、COM または .NET コンポーネント、およびデータ ファイル。

MATLAB Production Server アーカイブ

MATLAB MEX ファイルおよび MATLAB 関数。これらのファイルには単一のエントリ ポイントが必要です。

MATLAB スクリプト、MATLAB クラス ファイル、保護された関数ファイル (.p ファイル)、Java 関数、COM または .NET コンポーネント、およびデータ ファイル。MATLAB クラス ファイルは依存ファイルである場合があります。

データ ファイルなど、他のタイプのファイルをパッケージ化されたコード アーカイブに追加できます。詳細については、パッケージ化されたアプリケーションでのファイルの追加とアクセスを参照してください。

参考

トピック