我正在构建一个以 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
(我省略了用于配置的其余参数,它们不会因这个问题而改变)。
没有配置标志,但配置脚本从环境中读取某些变量。CFLAGS_FOR_TARGET
表示为目标系统构建时使用的标志。
不要与 混淆CFLAGS_FOR_BUILD
,如果构建系统需要使任何辅助可执行文件在构建系统上执行以帮助构建过程,则将使用这些标志。
我找不到任何官方文档,但是搜索源代码,它包含许多测试PREFER_SIZE_OVER_SPEED
or的实例__OPTIMIZE_SIZE__
。基于快速 grep,这两个标志几乎相同。唯一的区别是该printf
系列中的一种情况,如果为 传递了一个空指针%s
,那么前者会将其转换为,(null)
但后者会继续向前,可能会导致崩溃。