使用特定功能删除gcc死代码

时间:2012-09-18 18:10:34

标签: gcc dead-code

假设我有一个大型库liblarge,以及链接到liblarge的应用程序app。

Liblarge属于LGPL许可,应用程序属于专有应用程序。我希望能够从liblarge中删除所有“死代码”,这是未在应用中使用。我能以某种方式这样做吗?可能会向链接器提供已使用函数的列表吗?

1 个答案:

答案 0 :(得分:0)

没有简单的方法可以继续。

您可以在私人副本上使用上述技术(在我的评论中)进行锻炼* .o您可以删除。然后,您可以构建自己的修改后的liblarge源代码树,该树构建DSO / DLL,但在您完成不需要的工作后,从链接器命令行(用于构建DSO / DLL)中删除* .o。

这就是C / C ++的工作原理,一旦代码转化为目标代码,很多信息就会丢失。

例如,您可能希望尝试减小每个* .o文件的大小。这样做的主要方法是拆分 .c / .cpp编译单元。

C / C ++ ABI的问题在于编译器可以自由地将代码放在* .o文件中的任何位置,然后使用相对偏移量跳入和跳出其中的段。 * .o中没有足够的元数据能够拆分已编译的代码并查看其运行所需的所有依赖项。为此,您需要手动拆分输入源代码。

这就是嵌入式软件开发的一个原因,当内存占用过去很重要时,你可以将一个函数放在源文件中。这些天嵌入式系统有很多内存。