![](/img/trans.png)
[英]Difference between GCC arm options necessary when cross-compiling and when compiling directly on target?
[英]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.