runtime初期化時でのC ++コンストラクタ呼び出し

テクニカル・ノート 16676

アーキテクチャ:

ARM

コンポーネント:

linker

更新日:

2018/08/07 9:24

はじめに

自動ランタイムライブラリ選択(Automatic runtime library selection)を無効にすると、アプリケーションにおいて偶発的なハードウェア障害が発生します(このオプションを有効にすると、ランタイムエラーは発生しません)。 

対象

IAR Embedded Workbench for ARMバージョン6.x以降で利用可能なC++の派生言語を用いてビルドされたプロジェクト

原因

IARのライブラリの自動選択を使用してプロジェクトをリンクすると、リンカによって__iar_cstart_call_ctorsメソッドの呼び出しが追加されます。プロジェクト(Project) > オプション(Options) > リンカ(Linker) > ライブラリ(Library) > 自動ランタイムライブラリ選択(Automatic runtime library selection)を参照してください。

ライブラリの自動選択を使用せずにプロジェクトをリンクすると、__iar_cstart_call_ctorsメソッドの呼び出しはリンカによって追加されません。

IAR Embedded Workbench for ARM 6.10.2以降のバージョンにおける解決方法

プロジェクト(Project) > オプション(Options)> リンカ(Linker) > 追加オプション(Extra Options)において、コマンドラインオプションを追加します。テキストボックスに以下のテキストを入力してください。

--extra_init __iar_cstart_call_ctors

 

IAR Embedded Workbench for ARM 6.10.1以前のバージョンにおける解決方法

これらのバージョンでは、リンカに--extra_initコマンドラインオプションが用意されていません。
main()関数の先頭付近などで、明示的に関数呼び出しを行うことをお勧めします。

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。