2015-09-08 66 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添加到链接器标志。

相关问题