Main Content

制限

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 Compilerchange_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 プラグマにリストされる必要がある関数を検出する際に、コールバック文字配列や関数 fevalfminbndfminsearchfunm および fzero または ODE ソルバーの引数として指定されるテキストを MATLAB ファイル ソース コードから検索します。

コールバック文字配列として使用されたテキストを検出するには、MATLAB ファイルで "Callback" または "fcn" という文字を検索します。この検索では、uicontroluimenu などのグラフィックス オブジェクトで定義されるすべての 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 クラス ファイル。これらのファイルには単一のエントリ ポイントが必要です。

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

ライブラリ コンパイラ

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

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

MATLAB Production Server

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

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

関連するトピック