![](/img/trans.png)
[英]Linking C/C++ STM32 project using arm-none-eabi-gcc, newlib and cmake
[英]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
等部分。
我試過了
這些都不會使符號從地圖文件中消失。
我的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.