7.xxで作成したライブラリを8.xxで使用するとワーニングが発生します
テクニカル・ノート 20171003
アーキテクチャ:
Arm
コンポーネント:
linker
更新日:
2019/04/09 7:58
はじめに
IAR Embedded Workbench for Arm version 7.xx と version 8.11 以降では、 wchar_t のサイズと内部エンコードが異なるため、8.11以降のバージョンで 7.80以前で作成されたライブラリをリンクした場合、リンカメッセージ
Warning [Lt009]: Inconsistent wchar_t size
が発生します。
解説
wchar_t のサイズは、IAR Embedded Workbench for Arm version 7.80 以前は2バイト、version 8.11 では4バイトです。さらに、wchar_t オブジェクトの内部エンコードは、これらのバージョン間で異なります。
アプリケーションが wchar_t を使用している場合、バージョン7.80と8.11でビルドされたオブジェクトファイルを組み合わせるとリンカ警告が生成され、動作は予測不能です。通常は、1つのバージョンのオブジェクトコードのみを使用することを強くお勧めします。7.8から8.11などのメジャーアップグレードの場合は、すべてのコードを再ビルドするべきです。
再ビルドしないことを選択した場合は、少なくとも次の操作を実行する必要があります:
- a) バージョン7.xxでビルドされ、C ++で書かれたオブジェクトコードを再ビルドします。
- b) ライブラリに wchar_t が含まれている場合は、ライブラリをバージョン8.11でリビルドします。
- c) バージョン7.xxでビルドされたライブラリに wchar_t が含まれておらず、バージョン8.11(またはそれ以降)でビルドされたアプリケーションが実際に期待通りに動作する場合、警告メッセージを無視することをお勧めします。警告メッセージを表示しないようにするには、次の操作を行います:
- プロジェクト>オプション>リンカ>診断を選択
- 診断を無効化 に Lt009を設定
- OK をクリック
注1: 後で別の7.xxライブラリを8.11(またはそれ以降)のプロジェクトに追加する場合は、上記の診断を無効化オプション(Lt009)を削除して、手順a〜cをもう一度実行してください。
まとめ
IAR Embedded Workbench for Arm version 7.xx でビルドされた wchar_t を使用するライブラリは、8.11以降のバージョンで使用するためには、再ビルドする必要があります。