MATLAB コードからのスタンドアロン C/C++ 実行可能ファイルの生成
MATLAB Coder アプリを使用した C 実行可能ファイルの生成
この例では、MATLAB® Coder™ アプリを使用して MATLAB コードから C 実行可能ファイルを生成する方法を示します。この例では、ランダムなスカラー値を生成する MATLAB 関数の実行可能ファイルを生成します。
最初に、サンプルの MATLAB 関数とテスト ファイルを作成します。その後に以下を行います。
MATLAB Coder アプリを使用して MATLAB をエントリポイント関数として追加します。
生成されたライブラリ関数を呼び出す C の
main関数の例を生成します。生成された
main.cとmain.hを変更します。変更後の
main.cとmain.hをアプリが検出できるようにコード生成設定を変更します。実行可能ファイルを生成します。
サンプルの MATLAB 関数とテスト ファイルの作成
ローカルの書き込み可能なフォルダーで、開区間 (0,1) 上の標準一様分布からランダムなスカラー値を生成する MATLAB 関数 coderand を作成します。
function r = coderand() %#codegen r = rand();
同じローカルの書き込み可能なフォルダーで、coderand を呼び出す MATLAB ファイル coderand_test.m を作成します。
function y = coderand_test()
y = coderand();
エントリポイント関数の追加
MATLAB ツールストリップの [アプリ] タブから MATLAB Coder アプリを開きます。
[MATLAB Coder プロジェクトの作成] ダイアログ ボックスで、プロジェクトの名前を指定します。この例では、「coderand.coderprj」と入力します。プロジェクト ファイルが作業フォルダーに作成されます。
ツールストリップの [MATLAB Coder] タブで [エントリ ポイント] ボタンをクリックして [エントリ ポイント] ペインを開きます。エントリポイント関数の名前を「coderand」と入力します。coderand 関数に入力引数はないため、入力の型を指定する必要はありません。
スタンドアロン コードを生成する前に、MATLAB コードから MEX 関数を生成し、生成された MEX 関数をテスト ファイルを使用して実行することをお勧めします。このステップは、スタンドアロン コードでは診断が難しい場合があるコード生成時や実行時の問題を特定するのに役立つことがあります。このステップを実行するには、ツールストリップの [MATLAB Coder] タブで [生成された MEX の実行]、[実行ファイル] をクリックします。テスト ファイル coderand_test.m を選択します。MEX ファイルが正常に生成されて実行されます。
C の main 関数の生成
実行可能ファイルを生成するときに、C/C++ の関数を指定しなければなりません。既定では、C/C++ のスタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能ファイルを生成するときに、コード ジェネレーターによって main 関数が生成されます。この生成された main 関数はテンプレートであり、アプリケーションに合わせて変更します。main 関数の例を使用した生成コードの組み込みを参照してください。生成された main 関数をコピーして変更した後で、これを使用して C/C++ の実行可能ファイルを生成できます。または、独自の main 関数を記述することもできます。
coderand の実行可能ファイルを生成する前に、coderand を呼び出す main 関数を生成します。
MATLAB Coder アプリでは、既定では C スタティック ライブラリが生成されます。それらの設定を確認するには、ツールストリップの [MATLAB Coder] タブで、[言語] ボタンをクリックして生成コードの言語が C であることを確認し、[出力タイプ] ボタンをクリックして出力タイプがスタティック ライブラリであることを確認します。
[設定] をクリックして [コード生成設定] ダイアログ ボックスを開きます。[詳細設定] ペインで、[main の例の生成] パラメーターが
[main 関数の例を生成するが、コンパイルしない]に設定されていることを確認します。ツールストリップの [MATLAB Coder] タブで [コード生成] をクリックします。フォルダー
codegen/lib/coderand/examplesにmain.cファイルとmain.hファイルが生成されます。
生成された main の例のファイルの変更
生成された例のファイルは以降のコード生成で上書きされる可能性があるため、生成された main のファイルを変更する前に書き込み可能なフォルダーにコピーします。この例では、main.c と main.h を作業ディレクトリにコピーします。
main.cを開きます。coderandの呼び出しの結果を出力するようにmain_coderand関数を変更します。次の C コードを削除します。void main_coderand(void) { double r; /* Call the entry-point 'coderand'. */ r = coderand(); }削除した C コードを次のコードに置き換えます。
void main_coderand(void) { /* Call the entry-point 'coderand' and print the results. */ printf("coderand=%g\n", coderand()); }この例では、
main関数に引数はありません。main関数で次の行を削除します。(void)argc; (void)argv;main関数の定義を変更します。次の行を削除します。int main(int argc, char **argv)削除した行を次の行に置き換えます。
int main()変更を保存します。
main.hを開きます。/* Include Files */というコメントの下に次の行を追加します。#include <stdio.h>main関数の宣言を変更します。次の行を削除します。extern int main(int argc, char **argv);削除した行を次の行に置き換えます。
extern int main();変更を保存します。
コード生成設定の変更
例として生成された main ファイルを変更した後、コード生成設定を変更して、変更後の C ファイルを使用して実行可能な C 関数を作成するようにコード ジェネレーターに指示する必要があります。
出力タイプを実行可能ファイルに変更するには、ツールストリップの [MATLAB Coder] タブで [出力タイプ]、[実行可能ファイル (*.exe)] をクリックします。
変更後の C の main 関数を使用するようにコード ジェネレーターに指示するには、ツールストリップの [MATLAB Coder] タブで [設定] をクリックして [コード生成設定] ダイアログ ボックスを開きます。[カスタム コード] ペインの [追加ソース ファイル] ボックスに「
main.c」と入力します。
実行可能ファイルの生成
実行可能ファイルを生成するには、ツールストリップの [MATLAB Coder] タブで [コードを生成してビルド] をクリックします。作業フォルダーにファイル coderand.exe が生成されます。
Windows® プラットフォーム上の MATLAB で実行可能ファイルを実行するには、コマンド ウィンドウで次のコマンドを入力します。
system('coderand')この例の関数 coderand の実行可能ファイルは 0 ~ 1 の固定値を返します。実行ごとに新しい値を生成するコードを生成するには、MATLAB コードで関数 RandStream を使用します。
コマンド ラインでの C 実行可能ファイルの生成
この例では、ランダムなスカラー値を生成する MATLAB 関数と、その MATLAB 関数を呼び出す C の main 関数を作成します。それから、関数入力パラメーターの型を指定し、main 関数を指定し、MATLAB コードに対応する C 実行可能ファイルを生成します。
開区間 (0,1) 上の標準一様分布からランダムなスカラー値を生成する MATLAB 関数
coderandを作成します。function r = coderand() %#codegen r = rand();
coderandを呼び出す C の main 関数であるc:\myfiles\main.cを記述します。以下に例を示します。/* ** main.c */ #include <stdio.h> #include <stdlib.h> #include "coderand.h" #include "coderand_terminate.h" int main() { /* The initialize function is called automatically from the generated entry-point function. So, a call to initialize is not included here. */ printf("coderand=%g\n", coderand()); coderand_terminate(); return 0; }メモ
この例では、既定のファイル分割方法が MATLAB ファイルごとに 1 つのファイルを生成するようになっているため、
"coderand_terminate.h"をインクルードします。すべての関数に対して 1 つのファイルを生成するようにファイルの分割方法を設定している場合は、"coderand_terminate.h"をインクルードしないでください。C main 関数をインクルードするようにコード生成パラメーターを設定してから C 実行可能ファイルを生成します。
cfg = coder.config('exe'); cfg.CustomSource = 'main.c'; cfg.CustomInclude = 'c:\myfiles'; codegen -config cfg coderand
codegenは現在のフォルダーに C 実行可能ファイルcoderand.exeを生成します。サポート ファイルを既定のフォルダーcodegen/exe/coderandに生成します。codegenは、指定されたコード置換ライブラリが必要とする最低限の、ヘッダー ファイル用#includeステートメントを生成します。
C/C++ 実行可能ファイルの main 関数の指定
実行可能ファイルを生成するには、main 関数を指定しなければなりません。C 実行可能ファイルについては、C ファイル main.c を指定します。C++ 実行可能ファイルについては、C++ ファイル main.cpp を指定します。main 関数を含むフォルダーに 1 つの メイン ファイルしかないことを確認してください。さもないと、main.c が main.cpp よりも優先され、C++ コードを生成する際にエラーが発生します。[プロジェクトの設定] ダイアログ ボックス、コマンド ラインまたは [コード生成] ダイアログ ボックスでメイン ファイルを指定できます。
既定では、C/C++ のソース コード、スタティック ライブラリ、ダイナミック リンク ライブラリまたは実行可能ファイルを生成するときに、MATLAB Coder によって main 関数が生成されます。この生成された main 関数はテンプレートであり、アプリケーションに合わせて変更します。main 関数の例を使用した生成コードの組み込みを参照してください。生成された main 関数をコピーして変更した後で、これを使用して C/C++ の実行可能ファイルを生成できます。または、独自の main 関数を記述することもできます。
MATLAB 関数を C/C++ ライブラリ関数または C/C++ 実行可能ファイルに変換すると、MATLAB Coder によって、初期化関数と終了関数が生成されます。ファイルの分割方法が MATLAB ファイルごとに 1 つのファイルを生成するように設定されている場合は、main.c に初期化および終了ヘッダー関数をインクルードしなければなりません。それ以外の場合、main.c にそれらを含めないでください。初期化関数および終了関数の呼び出しの詳細については、生成された初期化関数と終了関数の使用を参照してください。
実行可能ファイルの main 関数は、コマンド ラインでコード構成オブジェクトのプロパティを設定するか MATLAB Coder アプリで [コード生成設定] ダイアログ ボックスを使用して指定できます。
コマンド ラインの入力
コード生成構成オブジェクトの CustomSource プロパティと CustomInclude プロパティを設定します。CustomInclude プロパティは CustomSource で指定された C/C++ ファイルの場所を示します。
実行可能ファイル用の構成オブジェクトを作成します。
cfg = coder.config('exe');CustomSourceプロパティ にmain関数を含む C/C++ ソース ファイルの名前を設定します。(詳細については、C/C++ 実行可能ファイルの main 関数の指定を参照) 以下に例を示します。cfg.CustomSource = 'main.c';CustomIncludeプロパティをmain.cの場所に設定します。以下に例を示します。cfg.CustomInclude = 'c:\myfiles';コマンド ライン オプションを使用して C/C++ 実行可能ファイルを生成します。たとえば、
myFunctionがdouble型の入力パラメーターを 1 つ取る場合は以下のとおりです。codegen -config cfg myMFunction -args {0}
MATLAB Coder は main 関数をコンパイルし、
myMFunction.mから生成した C/C++ コードにリンクします。
MATLAB Coder アプリの使用
[出力タイプ]、[追加ソース ファイル]、および [追加インクルード ディレクトリ] の各パラメーターを設定します。[追加インクルード ディレクトリ] パラメーターは [追加ソース ファイル] パラメーターで指定された C/C++ ファイルの場所を示します。
出力タイプを設定するには、ツールストリップの [MATLAB Coder] タブで [出力タイプ]、[実行可能ファイル (*.exe)] をクリックします。
[コード生成設定] ダイアログ ボックスを開くには、ツールストリップの [MATLAB Coder] タブで [設定] をクリックします。
[コード生成設定] ダイアログ ボックスで、[追加ソース ファイル] を
main関数を含む C/C++ ソース ファイルの名前に設定します。[追加インクルード ディレクトリ] パラメーターをmain.cの場所に設定します。実行可能ファイルを生成するには、ツールストリップの [MATLAB Coder] タブで [コードを生成してビルド] をクリックします。
参考
codegen | coder.MexCodeConfig | coder.CodeConfig | coder.EmbeddedCodeConfig