簡體   English   中英

使用GCC ARM Embedded進行編譯時,代碼大小加倍?

[英]Code size is doubled when compiling with GCC ARM Embedded?

我剛剛將Keil uVision(使用Keil ARM編譯器)的STM32微控制器項目移植到CooCox CoIDE(使用GCC ARM嵌入式編譯器)。

問題是,與Keil uVision相比,使用GCC在CoIDE中編譯時,代碼大小是雙倍大小。

怎么會這樣? 我能做什么?

Keil中的代碼大小:54632b(。text)CoIDE中的代碼大小:100844b(.text)

GCC編譯器標志:

arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -g2 -Wl,-Map=project.map -Os 
-Wl,--gc-sections -Wl,-TC:\arm-gcc-link.ld -g -o project.elf -L -lm

我懷疑CoIDE和GCC編譯了很多函數和文件,這些函數和文件存在於項目中,但尚未使用。 它是否有可能編譯整個文件,即使我只使用20中的1個函數? (即使我有-Os)..

很難說你的最終二進制文件中的哪些文件是真正編譯/鏈接的。 我想如果你沒有明確指定要編譯哪一個或者你沒有使用自己的Makefile,那么它會占用你在項目中找到的所有C文件。

但是,根據您提供的編譯器選項,如果您沒有以下編譯器標志,則鏈接器標志--gc-sections將不會產生太多垃圾: -ffunction-sections -fdata-sections 嘗試添加這些選項以在鏈接時刪除所有未使用的函數和數據。

由於問題是用C ++標記的,我想知道您是否要禁用異常和RTTI。 那些需要相當多的代碼。 -fno-exceptions -fno-rtti添加到鏈接器標志。

暫無
暫無

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

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