我似乎无法弄清楚为什么一些 printf
库函数从libc_nano.a链接到我的代码中,即使我从不使用任何 printf
. 它窃取了至少2K宝贵的闪存空间 . 我可以在链接器映射文件中看到 _printf_i
, _vfprintf_r
, _vfiprintf_r
等部分 .
我试过了
- Wl, - exclude-libs选项
链接描述文件中的 - EXCLUDE_FILE(..)
这些都不会使符号从 Map 文件中消失 .
我的gcc选项:
CFLAGS = -Og -Wall -g3 -Wdouble-promotion -mcpu=cortex-m0 -mthumb -fmessage-length=0 -ffunction-sections -mfloat-abi=soft -DUSE_HAL_DRIVER
LFLAGS = -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -specs=nosys.specs -specs=nano.specs -Wl,--gc-sections
arm-none-eabi-gcc.exe(用于ARM嵌入式处理器的GNU工具)5.2.1 20151202(再租赁)[ARM / embedded-5-branch revision 231848] Copyright(C)2015 Free Software Foundation,Inc . 这是免费软件;查看复制条件的来源 . 没有保修;甚至不适用于适销性或特定用途的适用性 .
首先,他们为什么要联系起来?有没有办法排除它们?
1 回答
告诉链接器生成交叉引用:
-Wl,--cref
查找以其中一个打印符号开头的行以及它下面的行 .
在那里你会发现内部使用printf的库函数 .