gcc - 有没有办法从我不使用的目标文件中删除所有函数?

标签 gcc compiler-construction space

我试图在我的可执行文件中节省空间,我注意到几个函数被添加到我的目标文件中,即使我从未调用它们(代码来自库)。

有没有办法告诉 gcc 自动删除这些功能,还是我需要手动删除它们?

最佳答案

如果您要编译成目标文件(不是可执行文件),那么编译器将永远不会删除任何非 static函数,因为您总是可以将目标文件链接到另一个将调用该函数的目标文件。所以你的第一步应该是声明尽可能多的函数static .

其次,编译器删除任何未使用函数的唯一方法是静态链接您的可执行文件。在这种情况下,至少有可能出现一个程序并找出哪些函数被使用,哪些函数未被使用。

问题是,我不相信 gcc 实际上会进行这种类型的跨模块优化。您最好的选择是-Os标记以优化代码大小,但即便如此,如果您有一个目标文件 abc.o,其中包含一些未使用的非静态函数,并且您静态链接到某些可执行文件 def.exe,我不相信 gcc 会去剥离列出未使用函数的代码。

如果你真的迫切需要这样做,我想你可能不得不实际 #include将文件放在一起,以便在预处理器通过后,编译单个 .c 文件。使用 gcc 编译单个巨大的巨型源文件,您最有可能消除未使用的函数。

关于gcc - 有没有办法从我不使用的目标文件中删除所有函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2634007/

相关文章:

c++ - 使用模板时初始化数组

javascript - 有没有像 JavaScript 编译器这样的东西?

haskell - 为什么 GHC 使用图约简而不是 super 组合器?

c - 为什么编译器是用 C/C++ 而不是使用 CoffeeScript(JavaScript、Node JS)编写的?

html - 如何在 <input> 元素中的文本和红色错误消息之间获得更多空间

visual-studio-2010 - Ctrl+Space 更改键盘,而不是在 Visual Studio 2010 上显示 Intellisense 的自动完成列表

gcc - 生成常量数据的 %pc 相对地址

c++ - 对于 c/cpp 包含路径,添加系统文件的路径并运行

c++ - 是否允许编译器优化堆内存分配?

css - IE7 清空 <div> 占用空间