gpt4 book ai didi

gcc - STM32 gcc (arm-none-eabi-gcc) 链接 printf 即使它没有被使用

转载 作者:行者123 更新时间:2023-12-04 19:00:00 25 4
gpt4 key购买 nike

我似乎不明白为什么有些 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 (GNU Tools for ARM Embedded Processors) 5.2.1 20151202 (re lease) [ARM/embedded-5-branch revision 231848] Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



    首先,他们为什么会联系起来?
    有什么方法可以排除它们吗?

    最佳答案

    告诉链接器生成交叉引用:-Wl,--cref

    --cref

    Output a cross reference table. If a linker map file is being generated, the cross reference table is printed to the map file. Otherwise, it is printed on the standard output. The format of the table is intentionally simple, so that it may be easily processed by a script if necessary. The symbols are printed out, sorted by name. For each symbol, a list of file names is given. If the symbol is defined, the first file listed is the location of the definition. The remaining files contain references to the symbol.



    查找以打印符号之一开头的行及其下方的行。
    grep -A5 _printf *.map

    在那里您会找到在内部使用 printf 的库函数。

    关于gcc - STM32 gcc (arm-none-eabi-gcc) 链接 printf 即使它没有被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39858015/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com