Newlib 2.5.0 をターゲット C ライブラリとして arm-eabi-gcc ツールチェーンを構築しています。
ターゲットの組み込みシステムは、実行速度よりも小さいコード サイズを優先します。コード サイズを小さくするように newlib を構成するにはどうすればよいですか?
strstr
デフォルトのビルドは、コード サイズが 1KB を超えるバージョンを生成するようなことを行います。
Newlib 2.5.0 をターゲット C ライブラリとして arm-eabi-gcc ツールチェーンを構築しています。
ターゲットの組み込みシステムは、実行速度よりも小さいコード サイズを優先します。コード サイズを小さくするように newlib を構成するにはどうすればよいですか?
strstr
デフォルトのビルドは、コード サイズが 1KB を超えるバージョンを生成するようなことを行います。
次のように newlib を構成します。
CFLAGS_FOR_TARGET="-DPREFER_SIZE_OVER_SPEED=1 -Os" \
../newlib-2.5.0/configure
(構成に使用した残りの引数を省略しましたが、この問題に基づいて変更されることはありません)。
configure フラグはありませんが、configure スクリプトは環境から特定の変数を読み取ります。CFLAGS_FOR_TARGET
ターゲット システム用にビルドするときに使用されるフラグを意味します。
と混同しないでくださいCFLAGS_FOR_BUILD
。これは、ビルド システムがビルド プロセスを支援するためにビルド システム上で実行する補助実行可能ファイルを作成する必要がある場合に使用されるフラグです。
これに関する公式ドキュメントは見つかりませんでしたが、ソース コードを検索すると、PREFER_SIZE_OVER_SPEED
またはのテストの多くのインスタンスが含まれていまし__OPTIMIZE_SIZE__
た。簡単な grep に基づくと、これら 2 つのフラグはほとんど同じです。唯一の違いはprintf
、ヌル ポインターが に渡された%s
場合、前者はそれを に変換します(null)
が、後者は に変換され、おそらくクラッシュを引き起こすというファミリのケースでした。