2015-09-08 68 views
3

我剛剛從Keil uVision(使用Keil ARM編譯器)移植到CooCox CoIDE(使用GCC ARM嵌入式編譯器)的STM32微控制器項目。使用GCC ARM Embedded進行編譯時代碼大小增加了一倍?

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

這怎麼可能?我能做什麼?

碼量凱爾: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)..

+0

除了@ greydet的回答,您還可以在鏈接器命令行中添加'--specs = nano.specs'。 –

+0

查看地圖文件,看看它是什麼 –

回答

1

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

但是,如果您沒有以下編譯器標誌,則從編譯器選項中可以看出,鏈接器標記--gc-sections不會造成太大的垃圾回收:-ffunction-sections -fdata-sections。嘗試添加這些選項以在鏈接時去除所有未使用的函數和數據。

+0

不幸的是,沒有運氣。 – Jolle

0

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

相關問題