【发布时间】:2014-09-03 07:32:13
【问题描述】:
当我在 GCC 中启用链接时间优化时,生成的二进制文件变得更大。我希望 GCC 能够删除大量冗余函数,并执行其他不可能的优化,那么这怎么会导致生成的输出增长呢?
编译器标志:
-Os -c -fno-builtin -ffunction-sections -fdata-sections -flto -mcpu=cortex-m0 -mthumb
链接器标志:
-nostdlib -s -Xlinker --gc-sections -flto -mcpu=cortex-m0 -mthumb -T
【问题讨论】:
-
您使用
-flto的具体情况如何?显示编译命令....并为我们提供了更多详细信息(编译器版本)。您是否尝试过使用最近的 GCC(即 2014 年 9 月的 4.9.1)? -
如果您使用 -O3(使代码更快但更大),LTO 为编译器提供了更多使代码更快(更大)的机会。如果您使用 -Os(制作小型二进制文件),LTO 为您提供了更多缩小代码大小的机会。
-
@MarcGlisse 谢谢,但我已经使用了 -Os 选项,否则固件根本不适合 64kb。
-
@Muis 首先,这些标志(以及 gcc 版本,最近发生了很大变化)应该包含在您的原始帖子中。其次,不,从您发布的内容(截断的命令行,所以我不得不猜测一下)您没有使用 -Os(不是真正重要的地方)。
-
@MichielUitHetBroek 原来这是我的 IDE (LPCXpresso) 中的一个错误,该标志也适用于我。
标签: gcc linker arm compiler-optimization