优化C编译:即时删除未引用的部分

时间:2011-12-01 09:04:58

标签: c compilation linker optimization

我们面临一个有趣的话题。可以说我们有一个special-functions.c文件,基本上是一个库。 我们需要优化代码,以便在构建过程中即时删除所有未使用/未引用的函数。 我不是在搜索一般未使用的(死的)代码:如果编译到其中一个架构,某些部分将“死”,但它将用于其他架构构建。

有人知道这样做的标志,工具,方法和技巧吗? 编译器是带有ansi 99 C代码的标准gcc。

EDIT 我知道,这主要是链接器的一部分,但是使用gcc,这个过程实际上并没有分成两部分。

3 个答案:

答案 0 :(得分:2)

我认为如果您使用-flto标志(链接时间优化)编译和链接,最近的GCC(即 4.6 )应该这样做。我认为hiddeninternal visibility应该是相关的(至少对于非静态函数)。

答案 1 :(得分:2)

来自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

答案 2 :(得分:0)

据我所知,GNU二进制工具(在本例中为ld)已经删除了静态链接上未使用的引用