このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
生成コドを共有ラブラリとしてパッケジ化
嵌入式编码器®のライセンスがある場合は,モデルコンポーネントから生成されたソースコードをパッケージ化して配布を容易にし,コードを窗口®ダ▪▪ナミックリンクラ▪▪ブラリ(. dll
), unix®共有オブジェクト(所以
),またはMacintosh OS Xダ▪▪ナミックラ▪▪ブラリ(. dylib
)の共有ラaapl . aapl .ブラリとしてビルドして,共有して使用することができます。自分自身または他のユ,ザ,が,Windows, UNIXまたはMacintosh OS X開発用コンピュタで実行されるアプリケションに共有ラブラリを統合できます。生成された. dll
、所以
,または. dylib
ファイルはさまざまなアプリケーション間で共有可能で,そのファイルを使用するアプリケーションを再コンパイルせずにアップグレードできます。
生成された共有ラ▪▪▪ブラリに▪▪▪いて
システムタゲットファルert_shrlib.tlc
を使用するようにコドジェネレタを設定して,共有ラブラリをビルドします。システムタゲットファルのコド生成では次をエクスポトします。
デ,タとしての
ExportedGlobal
型の変数と信号デタとしてのリアルタムモデル構造体(
)模型
_Mモデルコ,ドを実行するために必要な関数
生成された共有ラesc escブラリに含まれるシンボルのリストを表示するには,次のようにします。
Windowsでは,依赖步行者ユ,ティリティ(https://www.dependencywalker.comからダウンロド可能)を使用します。
Unixでは,
nm - d
を使用します。模型
所以Macintosh OS Xでは,
nm - g
を使用します。模型
. dylib
共有ラesc escブラリを生成および使用するには,次のようにします。
モデルコドの共有ラブラリバジョンを生成します。
共有ラブラリファルを読み込んで使用するアプリケションコドを作成します。
モデルコドの共有ラブラリバジョンの生成
モデルコドの共有ラブラリバジョンを生成します。
モデルを開き,
ert_shrlib.tlc
システムタゲットファルを使用するように構成します。ert_shrlib.tlc
システムターゲットファイルを選択すると,ビルドプロセスでモデルコードの共有ライブラリバージョンが現在の作業フォルダーに生成されます。この選択によって,コ,ドジェネレ,タ,がモデルに対して生成するコ,ドは変更されません。モデルを作成します。
ビルドが完了したら,モデルサブフォルダ,の生成コ,ドを確認し,現在のフォルダ,の
. dll
、所以
,または. dylib
ファ@ @ルを確認します。
共有ラブラリを使用するアプリケションコドの作成
アプリケーションコードで共有ライブラリファイルを読み込み,その関数とデータにアクセスする方法の例を示すために,MathWorksはモデルrtwdemo_shrlib
を提供しています。
メモ
rtwdemo_shrlib
スクリプトを実行する前に,書き込み可能な作業フォルダ,に移動します。
モデルで,青いボタンをクリックしてスクリプトを実行します。スクリプトは以下を実行します。
モデルから共有ラWindows上の. exe(64ビットのWindows上の. exe)
rtwdemo_shrlib_win64.dll
など)をビルドします。共有ラ@ @ブラリファ@ @ルを読み込んで使用するサンプルアプリケ@ @ション
rtwdemo_shrlib_app
をコンパ@ @ルしてリンクします。サンプルアプリケ,ションを実行します。
ヒント
移植性のために,明示的なリンクが推奨されます。ただし,Windowsシステムでは,暗黙のリンクをサポ,トするためにert_shrlib
システムタゲットファルで. lib
ファesc escルが生成されて,保持されます。
暗黙のリンクを使用するには,生成されたヘッダーファイルを少しだけ変更して,生成されたCファイルで使用できるようにする必要があります。たとえば,Visual c++®を使用する場合は,共有ラ使用__declspec (dllimport)
を宣言します。
このモデルでは次のサンプルアプリケションファルを使用します。これらのファルはフォルダ
(開く)にあります。matlabroot
/工具箱/ rtw / rtwdemos / shrlib_demo
ファereplicationル | 説明 |
---|---|
rtwdemo_shrlib_app.h |
サンプルアプリケションのヘッダファル |
rtwdemo_shrlib_app.c |
モデル用に生成された共有ラ@ @ブラリファ@ @ルを読み込んで使用するサンプルアプリケ@ @ション |
run_rtwdemo_shrlib_app.m |
サンプルアプリケションをコンパル,リンク,および実行するスクリプト |
モデルウィンドウで白いボタンをクリックして,これらの各ファ。さらに,スクリプトを実行すると,関連するソースファイルおよび生成コードファイルが現在のフォルダーに配置されます。ファereplicationルは、独自の ERT 共有ライブラリ ファイルのアプリケーション コードを記述するためのテンプレートとして使用できます。
以下の節では,サンプルアプリケ,ションファ,ルの主要な抜粋を示します。
サンプルアプリケションのヘッダファル
サンプルアプリケションのヘッダファルrtwdemo_shrlib_app.h
には,モデルの外部入力と出力の型宣言が含まれます。
#ifndef _APP_MAIN_HEADER_ #define _APP_MAIN_HEADER_ typedef struct {int32_T Input;} ExternalInputs_rtwdemo_shrlib;typedef struct {int32_T输出;} ExternalOutputs_rtwdemo_shrlib;# endif / * _APP_MAIN_HEADER_ * /
サンプルアプリケションのcコド
サンプルアプリケ,ションのrtwdemo_shrlib_app.c
には,共有ラ@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @プラットフォームに応じて,コードはWindowsまたはUNIXのライブラリコマンドを呼び出します。
#if (defined(_WIN32)||defined(_WIN64)) /* WINDOWS */ #include < WINDOWS .h> #define GETSYMBOLADDR GetProcAddress #define LOADLIB LoadLibrary #define CLOSELIB FreeLibrary #else /* UNIX */ #include#define GETSYMBOLADDR dlsym #define LOADLIB dlopen #define CLOSELIB dlclose #endif int main() {void* handleLib;...#if defined(_WIN64) handllibb = LOADLIB("./rtwdemo_shrlib_win64.dll");#else #if defined(_WIN32) handleLib = LOADLIB("./rtwdemo_shrlib_win32.dll");#else /* UNIX */ handllib = LOADLIB("./rtwdemo_shrlib. "所以“RTLD_LAZY);#endif #endif…返回(CLOSELIB (handleLib));}
以下のコードの抜粋は,Cアプリケーションでモデルのエクスポートされたデータと関数にアクセスする方法を示しています。ユーザー定義の初期化コード,ステップコード,および終了コードを追加するためのフックに注目してください。
int32_T我;...空白(* mdl_initialize) (boolean_T);空白(* mdl_step)(空白);空白(* mdl_terminate)(空白);ExternalInputs_rtwdemo_shrlib (* mdl_Uptr);ExternalOutputs_rtwdemo_shrlib (* mdl_Yptr);uint8_T (* sum_outptr);...#if (defined(LCCDLL)||defined(BORLANDCDLL)) /*当DLL与LCC或BORLANDC链接时,导出的符号包含前导下划线*/ mdl_initialize =(void(*)(boolean_T))GETSYMBOLADDR(handleLib, "_rtwdemo_shrlib_initialize"); mdl_step =(void(*)(void))GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_step"); mdl_terminate =(void(*)(void))GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_terminate"); mdl_Uptr =(ExternalInputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_U"); mdl_Yptr =(ExternalOutputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_Y"); sum_outptr =(uint8_T*)GETSYMBOLADDR(handleLib , "_sum_out"); #else mdl_initialize =(void(*)(boolean_T))GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_initialize"); mdl_step =(void(*)(void))GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_step"); mdl_terminate =(void(*)(void))GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_terminate"); mdl_Uptr =(ExternalInputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_U"); mdl_Yptr =(ExternalOutputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_Y"); sum_outptr =(uint8_T*)GETSYMBOLADDR(handleLib , "sum_out"); #endif if ((mdl_initialize && mdl_step && mdl_terminate && mdl_Uptr && mdl_Yptr && sum_outptr)) { /* === user application initialization function === */ mdl_initialize(1); /* insert other user defined application initialization code here */ /* === user application step function === */ for(i=0;i<=12;i++){ mdl_Uptr->Input = i; mdl_step(); printf("Counter out(sum_out): %d\tAmplifier in(Input): %d\tout(Output): %d\n", *sum_outptr, i, mdl_Yptr->Output); /* insert other user defined application step function code here */ } /* === user application terminate function === */ mdl_terminate(); /* insert other user defined application termination code here */ } else { printf("Cannot locate the specified reference(s) in the shared library.\n"); return(-1); }
サンプルアプリケ,ションのスクリプト
アプリケ,ションスクリプトrun_rtwdemo_shrlib_app
はモデルを読み込んでリビルドした後に,モデルの共有ライブラリターゲットファイルをコンパイル,リンク,および実行します。rtwdemo_shrlib
を開き,白いボタンをクリックしてソースコードを表示して,スクリプトソースファイルを表示できます。スクリプトで,開発環境に適用される可能性のあるコンパイル,リンク,および実行用のプラットフォーム依存コマンドの文字ベクトルを構成します。スクリプトを実行するには,青いボタンをクリックします。
メモ
rtwdemo_shrlib
モデルを最初に開かずにrun_rtwdemo_shrlib_app
スクリプトを実行するには,書き込み可能な作業フォルダ,に移動し,以下のmatlab®コマンドを発行します。
目录(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“shrlib_demo”))
メモ
1の行で終了関数を2回呼び出すのは無効です。終了関数はポンタをクリアし,それらをnullに設定します。関数を 2 回目に呼び出すと NULL ポインターが逆参照され、プログラム エラーになります。
共有ラ@ @ブラリの制限
共有ラesc escブラリのビルドには,次のような制限が適用されます。
ert_shrlib.tlc
システムタゲットファルのコド生成では,次のものをデタとしてエクスポトします。ExportedGlobal
型の変数と信号リアルタescムモデル構造体(
)模型
_M
函数调用子系统を含むモデルでは,
ert_shrlib.tlc
システムターゲットファイルのコード生成で,初期化エントリポイント関数と終了エントリポイント関数に関連付けられたシンボルのみが共有ライブラリにエクスポートされます。ert_shrlib.tlc
システムターゲットファイルのコード生成では,C言語のみがサポートされています(c++ではない)。ert_shrlib.tlc
を選択すると,モデルコンフィギュレ,ションパラメ,タ,の[言語]はグレ,表示になります。生成された共有ライブラリを使用してモデルシミュレーションを再構成するには,アプリケーションの作成者は,システムと元のアプリケーションの共有ライブラリ関数呼び出しの間でタイミングを維持しなければなりません。シミュレション結果と統合結果を比較できるように,タミングは一貫していなければなりません。モデルコンフィギュレ,ションパラメ,タ,の[サポ,ト:連続時間]と[1 emfの出力/更新関数]を有効にするモデルから共有ライブラリを生成している場合,シミュレーションに関するさらなる考慮事項が適用されます。詳細にいては,1の出力/更新関数依存関係を参照してください。