このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
制限
MATLAB とツールボックスのパッケージ化
MATLAB® Compiler™ は MATLAB 言語すべてと、MATLAB を基礎とするほぼすべてのツールボックスをサポートします。ただし、以下のものを除きます。
MATLAB とコンパニオン ツールボックスに含まれる、あらかじめビルドされたグラフィカル ユーザー インターフェイス。
コマンド ラインから直接呼び出すことができない機能。
コンパイルされたアプリケーションは、MATLAB が実行されているオペレーティング システムでのみ実行できます。ただし、MATLAB Compiler で生成されたコンポーネントを MATLAB で使用することはできません。また、MATLAB Runtime は MATLAB とほぼ同じサイズであるため、MATLAB Compiler でビルドされたアプリケーションを実行するには特定のストレージ メモリと RAM が必要です。システム要件に関する最新情報については、MathWorks Web サイトにアクセスしてください。
コンパイルされたアプリケーションは、以下の例外を除き、開発されたものと同じプラットフォームでのみ実行できます。
互換性のある任意のプラットフォームで実行されている MATLAB Web App Server™ に配布可能な Web アプリ。
MATLAB データ API を使用してコンパイルされた、プラットフォーム固有のファイルを含んでいない C++ ライブラリ。
.NET Core を使用してコンパイルされた、プラットフォーム固有のファイルを含んでいない .NET アセンブリ。
プラットフォーム固有のファイルを含んでいない Java® パッケージ。
プラットフォーム固有のファイルを含んでいない Python® パッケージ。
MATLAB Compiler の制限の完全なリストは、https://www.mathworks.com/products/compiler/compiler_support.html
を参照してください。
メモ
MATLAB Compiler でサポートされていない関数のリストについては、MATLAB Compiler と MATLAB Compiler SDK でのコンパイルでサポートされていない関数を参照してください。
コールバック問題の修正: 欠落した関数
MATLAB Compiler がスタンドアロン アプリケーションを作成するときに、コマンド ラインで指定した MATLAB ファイルがパッケージ化されます。さらに、パッケージ化された MATLAB ファイルが呼び出すその他すべての MATLAB ファイルが含められます。MATLAB Compiler は依存関係の解析を使用して、指定された MATLAB ファイル、MEX ファイルおよび P ファイルが依存するすべての関数を判別します。
メモ
P ファイルに関連付けられた MATLAB ファイルが利用できない場合、依存関係の解析では P ファイルの依存関係を検出できません。
MATLAB ファイル内で関数が呼び出される唯一の場所が、次のいずれかの場所での関数呼び出しである場合、依存関係の解析でその関数を特定できません。
コールバック文字列
関数
feval
または ODE ソルバーに引数として渡される文字配列ヒント
また、コンパイルしたアプリケーションが読み込む
.mat
ファイルの依存関係解析から従属関数を隠すこともできます。mcc -a
引数か%#function
プラグマを使用して、load
コマンドでサポートされる.mat
ファイル クラスまたは関数を特定します。
MATLAB Compiler は、パッケージ化する関数の名前をこれらのテキスト文字配列内で検索しません。
現象
アプリケーションを実行しても、プッシュ ボタンのような対話型ユーザー インターフェイス要素は動作しません。コンパイルされたアプリケーションは以下のエラー メッセージを発行します。
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
を使用して文字配列としてコールバックを指定します。関数ハンドルでコールバックを指定します。
-a
オプションを指定します。
文字配列としてのコールバックの指定. コールバック文字配列内でのみ指定されているすべての関数のリストを作成し、別の %#function
プラグマ ステートメントを使用してこれらの関数を渡します。これにより製品の依存関係解析がオーバーライドされ、%#function
プラグマにリストされた関数が依存関係解析に明示的に含まれます。
たとえば、サンプル アプリケーション my_test
での関数 change_colormap
の呼び出しはこの現象の一例といえます。MATLAB Compiler で 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 プログラミングの基礎』ドキュメンテーションを参照してください。
-a オプションの指定. %#function
プラグマを使用する代わりに、MATLAB Compiler のコマンド ラインで -a
オプションを使用して、欠落した 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 でファイルの書き込みを試行しているフォルダー (現在の作業フォルダーの場合が多い) に対する書き込み権限がない。
MATLAB Compiler でファイルの書き込みを試行しているフォルダー (現在の作業フォルダーの場合が多い) の空き容量が不足している。
スタンドアロン アプリケーションを作成しておりそのテストを行っている場合、プロセスが実行中になるため MATLAB Compiler が新しいバージョンで上書きするのをブロックしている可能性がある。
パッケージ化された関数の 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
を使用して関数をパッケージ化すると現在の作業フォルダーが検索されない
次の例のように which
を使用すると、配布されたアプリケーションで現在の作業フォルダーは検索されません。さらに、関数 open
が誤作動する可能性があります。
function pathtest which myFile.mat open('myFile.mat')
代わりに、以下のいずれかの方法を使用してください。
現在のフォルダーのファイルを明確に指定するには、以下のように
pwd
を使用します。open([pwd '/myFile.mat'])
一般的な関数
open
を使用する代わりに、load
または他の特定の関数を特定のファイル タイプに使用します。load
は、現在のフォルダーのファイルをチェックします。以下に例を示します。load myFile.mat
[コンパイラ] アプリの [アプリケーションの実行に必要なファイル] 領域にファイルを含めるか、関数
compiler.build
を使用してAdditionalFiles
オプションを含めるか、mcc
を使用して-a
フラグを含めます。
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 クラス ファイル、保護された関数ファイル ( |