2011-12-01 33 views
4

我们正面临一个有趣的话题。假设我们有一个special-functions.c文件,基本上是一个库。 我们需要优化代码,以便在构建过程中即时摆脱所有未使用/未引用的功能。 我不是在寻找通常未使用的(死的)代码:在编译到其中一个体系结构的情况下,某些部分将会“死掉”,但它将用于其他体系结构构建。优化C编译:即时删除未引用的部分

有没有人知道标志,工具,方法和技巧? 编译器是带有ANSI C99代码的标准gcc。

编辑 我知道,这主要是链接器的一部分,但是使用gcc,这个过程并不是真的被分成两部分。

回答

2

unusesd引用从http://embeddedfreak.wordpress.com/2009/02/10/removing-unused-functionsdead-codes-with-gccgnu-ld/

  • 编译-fdata-sections保持独立的数据数据 部分和-ffunction-sections将功能保留在单独的 部分,因此如果未使用它们(数据和功能)可以被丢弃。
  • 链接--gc-sections删除未使用的部分。

例如:

gcc -Os -fdata-sections -ffunction-sections test.c -o test -Wl,--gc-sections 
+0

这确实是据我看到它。谢谢! – petermolnar

2

我认为最近的海湾合作委员会(即4.6)应该做的,如果您编译和-flto标志(链接时优化)链接。我会想象有hiddeninternalvisibility应该是相关的(至少对于非静态函数)。

0

据我所知,在GNU二进制utils的(LD,在这种情况下)已经去除静态链接