簡體   English   中英

即使未使用STM32 gcc(arm-none-eabi-gcc)鏈接printf

[英]STM32 gcc (arm-none-eabi-gcc) links printf even though it is not used

我似乎無法弄清楚為什么某些printf庫函數從libc_nano.a鏈接到我的代碼中,即使我從不使用任何printf 它竊取了至少2K的寶貴閃存空間。 我可以在鏈接器映射文件中看到_printf_i_vfprintf_r_vfiprintf_r等部分。

我試過了

  • WL,--exclude-libs選項
  • 鏈接描述文件中的EXCLUDE_FILE(..)

這些都不會使符號從地圖文件中消失。

我的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版本231848]版權所有(C)2015自由軟件基金會,公司。這是免費的軟件; 請參閱復制條件的來源。 沒有保修; 甚至不是出於適銷性或針對特定目的的適用性。

首先,為什么它們被鏈接? 有什么方法可以排除它們?

告訴鏈接器生成一個交叉引用: -Wl,--cref

--cref

輸出交叉參考表。 如果正在生成鏈接器映射文件,則將交叉引用表打印到映射文件。 否則,它將被打印在標准輸出上。 該表的格式特意簡單,因此可以在需要時通過腳本輕松處理。 符號被打印出來,按名稱排序。 對於每個符號,給出文件名列表。 如果定義了符號,則列出的第一個文件是定義的位置。 其余文件包含對該符號的引用。

查找以打印符號之一開頭的行,以及在其下方的行。

grep -A5 _printf *.map

在這里,您會找到內部使用printf的庫函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM