このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
制限
MATLAB とツールボックスのパッケージ化
MATLAB® Compiler SDK™ は MATLAB 言語を完全に、また MATLAB を基礎とするツールボックスをほぼすべてサポートします。ただし、以下は除きます。
MATLAB とコンパニオン ツールボックスに含まれる、あらかじめビルドされたグラフィカル ユーザー インターフェイス。
コマンド ラインから直接呼び出すことができない機能。
コンパイルされたアプリケーションは、MATLAB が実行されているオペレーティング システムでのみ実行できます。ただし、MATLAB Compiler SDK で生成されたコンポーネントを MATLAB で使用することはできません。また、MATLAB Runtime は MATLAB とほぼ同じサイズであるため、MATLAB Compiler SDK でビルドされたアプリケーションが稼働するには特定のストレージ メモリと RAM が必要です。システム要件に関する最新情報については、MATLAB システム要件を参照してください。
コンパイルされたアプリケーションは、以下の例外を除き、開発されたものと同じプラットフォームでのみ実行できます。
互換性のある任意のプラットフォームで実行されている MATLAB Web App Server™ にデプロイ可能な Web アプリ。
MATLAB データ API を使用してコンパイルされた、プラットフォーム固有のファイルを含んでいない C++ ライブラリ。
.NET Core を使用してコンパイルされた、プラットフォーム固有のファイルを含んでいない .NET アセンブリ。
プラットフォーム固有のファイルを含んでいない Java® パッケージ。
プラットフォーム固有のファイルを含んでいない Python® パッケージ。
メモ
Simulink® Compiler™ のアーティファクトはクロスプラットフォーム互換ではなく、それらをデプロイするプラットフォームと同じプラットフォームでビルドする必要があります。
MATLAB Compiler SDK の制限の完全なリストは、https://www.mathworks.com/products/compiler/compiler_support.html
を参照してください。
メモ
MATLAB Compiler SDK でサポートされていない関数のリストについては、MATLAB Compiler と MATLAB Compiler SDK でのコンパイルでサポートされていない関数を参照してください。
欠落した関数によるコールバックの問題
MATLAB Compiler SDK でアプリケーションを作成する際は、指定した MATLAB ファイルがパッケージ化されます。さらに、パッケージ化された MATLAB ファイルが呼び出すその他すべての MATLAB ファイルが含められます。MATLAB Compiler SDK は依存関係の分析関数を使用して、指定された MATLAB ファイル、MEX ファイル、および P ファイルが依存するすべての関数を判別します。
メモ
P ファイルに関連付けられた MATLAB ファイルが利用できない場合、依存関係の分析では P ファイルの依存関係を検出できません。
MATLAB ファイル内で関数が呼び出される唯一の場所が、次のいずれかの場所での関数呼び出しである場合、依存関係の分析でその関数を特定できません。
コールバック文字列
関数
feval
または ODE ソルバーに引数として渡される文字配列ヒント
また、コンパイルしたアプリケーションが読み込む
.mat
ファイルの依存関係解析から従属関数を隠すこともできます。mcc -a
引数か%#function
プラグマを使用して、load
コマンドでサポートされる.mat
ファイル クラスまたは関数を特定します。
MATLAB Compiler SDK は、パッケージ化する関数の名前をこれらのテキスト文字配列内で検索しません。
現象
アプリケーションを実行しても、プッシュ ボタンのような対話型ユーザー インターフェイス要素は動作しません。コンパイルされたアプリケーションは以下のエラー メッセージを発行します。
An error occurred in the callback: change_colormap The error message caught was : Reference to unknown function change_colormap from FEVAL in stand-alone mode.
回避方法
このエラーを回避するいくつかの方法があります。
%#function
pragma
を使用して文字配列としてコールバックを指定する関数ハンドルでコールバックを指定する
[コンパイラ] アプリの [アプリケーションの実行に必要なファイル] 領域に MATLAB 関数を含めるか、関数
compiler.build
を使用してAdditionalFiles
オプションを含めるか、mcc
を使用して-a
フラグを含める。
文字配列としてのコールバックの指定. コールバック文字配列内でのみ指定されているすべての関数のリストを作成し、別の %#function
プラグマ ステートメントを使用してこれらの関数を渡します。これにより製品の依存関係の分析がオーバーライドされ、%#function
プラグマにリストされた関数が依存関係の分析に明示的に含まれます。
たとえば、サンプル アプリケーション my_test
での関数 change_colormap
の呼び出しはこの現象の一例といえます。MATLAB Compiler SDK で change_colormap
MATLAB ファイルを確実に処理するには、関数名を %#function
プラグマにリストしてください。
function my_test() % Graphics library callback test application %#function change_colormap peaks; p_btn = uicontrol(gcf,... 'Style', 'pushbutton',... 'Position',[10 10 133 25 ],... 'String', 'Make Black & White',... 'CallBack','change_colormap');
関数ハンドルによるコールバックの指定. 関数ハンドルにコールバックを指定するには上記の例と同じコードを使用し、最後の行を以下に置き換えます。
'CallBack',@change_colormap);
コールバックの値の指定方法の詳細は、『MATLAB プログラミングの基礎』ドキュメンテーションを参照してください。
MATLAB ファイルで欠落している関数の検出
アプリケーションで %#function
プラグマにリストされる必要がある関数を検出する際に、コールバック文字配列や関数 feval
、fminbnd
、fminsearch
、funm
および fzero
または ODE ソルバーの引数として指定されるテキストを MATLAB ファイル ソース コードから検索します。
コールバック文字配列として使用されたテキストを検出するには、MATLAB ファイルで "Callback" または "fcn" という文字を検索します。この検索では、uicontrol
や uimenu
などのグラフィックス オブジェクトで定義されるすべての Callback
プロパティが検索されます。さらに、コールバックをサポートする CloseRequestFcn
のように、Fcn
で終わる Figure や座標軸のプロパティを検出します。
UNIX システム上の警告の抑制
UNIX® システム上でスタンドアロン アプリケーションを実行するときに、いくつかの警告が表示される場合があります。
libjvm.so
警告を抑制するには、プラットフォームに適切なダイナミック ライブラリ パスを設定します。詳細については、デプロイ用の MATLAB Runtime パスの設定を参照してください。
また、Java を使用せずにアプリケーションを実行できる場合は、コンパイラのオプション -R -nojvm
を使用してアプリケーションの nojvm
ランタイム オプションを設定できます。
-nojvm オプションでのグラフィックスの使用不可
グラフィックスを使用するプログラムを -nojvm
オプションでコンパイルすると、ランタイム エラーが出力されます。
出力ファイルの生成の不可
このエラーが出力される場合、以下のようないくつかの原因が考えられます。
Can't create the output file filename
以下のような原因が考えられます。
MATLAB Compiler SDK でファイルの書き込みを試行しているフォルダー (現在の作業フォルダーの場合が多い) に対する書き込み権限がない。
MATLAB Compiler SDK でファイルの書き込みを試行しているフォルダー (現在の作業フォルダーの場合が多い) の空き容量が不足している。
スタンドアロン アプリケーションを作成しておりそのテストを行っている場合、プロセスが実行中になるため MATLAB Compiler SDK が新しいバージョンで上書きするのをブロックしている可能性がある。
パッケージ化された関数の MATLAB ファイル ヘルプがない
説明コメントによるオンライン ヘルプを備えた MATLAB ファイルを作成してパッケージ化した場合、次のコマンドの結果を読むことはできません。
help filename
メモ
パフォーマンス上の理由により、MATLAB ファイルのコメントは MATLAB Runtime を暗号化する前に除去されます。
Mac OS X での MATLAB Runtime のバージョン管理は未サポート
Mac OS X では、同一マシンに複数バージョンの MATLAB Runtime をインストールする機能はサポートされていません。MATLAB の新しいバージョンを入手したら、すべてのアプリケーションとコンポーネントの再コンパイルと再デプロイを行わなければなりません。また、新しいバージョンの MATLAB Runtime をターゲット マシンにインストールする場合は、新バージョンをインストールする前に古いバージョンの MATLAB Runtime を削除しなければなりません。ターゲット マシンに搭載できる MATLAB Runtime のバージョンは 1 つのみです。
MATLAB Compiler で以前のニューラル ネットワークはデプロイできない
以前のバージョンの Deep Learning Toolbox™ で保存されたネットワークを読み込むには、いくつかの初期化ルーチンが必要ですが、これらはデプロイできません。そのため、これらのネットワークは更新しないと、デプロイすることができません。
たとえば、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
パッケージ モードで複数の引数をもつ PRINTDLG の呼び出し制限
コンパイル済みモードでは、MATLAB 関数 printdlg
の呼び出しに 1 つの引数のみを指定できます (たとえば printdlg(gcf)
)。
複数の引数を使用して 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
を使用してファイルを特定できます。
アプリケーションにデータ ファイルを含める方法の詳細については、パッケージ化されたアプリケーションでのファイルへのアクセスを参照してください。
C++ SetData を使用して mwArray を動的にサイズ変更する場合の制限
C++ の SetData
メソッドを使用して、mwArray
を動的にサイズ変更することはできません。
たとえば、次の配列を使用して作業しているとします。
[1 2 3 4]
この場合、SetData
を使用して配列のサイズを 5 つの要素の長さに増加させることはできません。
パッケージ化に使用可能なファイル タイプ
デプロイ アプリケーションを使用するパッケージ化で有効なファイル タイプと無効なファイル ファイプは次のとおりです。
ターゲット アプリケーション | 有効なファイルのタイプ | 無効なファイルのタイプ |
---|---|---|
スタンドアロン アプリケーション | MATLAB MEX ファイル、MATLAB スクリプト、MATLAB 関数、および MATLAB クラス ファイル。これらのファイルには単一のエントリ ポイントが必要です。 | 保護された関数ファイル ( |
ライブラリ コンパイラ | MATLAB MEX ファイル、MATLAB 関数、および MATLAB クラス ファイル。これらのファイルには単一のエントリ ポイントが必要です。 | MATLAB スクリプト、保護された関数ファイル ( |
MATLAB Production Server | MATLAB MEX ファイルおよび MATLAB 関数。これらのファイルには単一のエントリ ポイントが必要です。 | MATLAB スクリプト、MATLAB クラス ファイル、保護された関数ファイル ( |