3

我刚刚将一个 STM32 微控制器项目从 Keil uVision(使用 Keil ARM 编译器)移植到 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)..

4

2 回答 2

1

根据您提供的信息,很难说最终二进制文件中真正编译/链接了哪些文件。我想如果您没有明确指定要编译哪个 C 文件或者您不使用自己的 Makefile,它会占用它在您的项目中找到的所有 C 文件。

但是从您提供的编译器选项来看,--gc-sections如果您没有以下编译器标志,则链接器标志不会造成太多垃圾:-ffunction-sections -fdata-sections. 尝试添加这些选项以在链接时剥离所有未使用的函数和数据。

于 2015-09-08T12:56:09.213 回答
0

由于这个问题是用 C++ 标记的,我想知道你是否想禁用异常和 RTTI。这些需要相当多的代码。添加-fno-exceptions -fno-rtti到链接器标志。

于 2017-03-09T09:18:47.577 回答