在编译期间包括未使用的代码

时间:2017-07-28 12:12:39

标签: c++ makefile

从Makefile构建我的应用程序我发现从代码中排除某些类及其使用不会对构建的应用程序的大小产生影响。

// some file
// #include "SomeClass.h"
.......
void myfunc()
{
     SomeClass _cl;
     // do something with _cl etc...
     // _cl.SomeFunc();
     .........
}


Makefile
......
SOURCES = ... SomeClass.cpp .... etc

但是如果我从Makefile中删除SomeClass.cpp,那么构建的应用程序的大小确实会变小。为什么gcc没有优化编译代码,也没有从最终结果中排除未使用的SomeClass?

1 个答案:

答案 0 :(得分:3)

您可以通过编译标志配置它。在linux / gcc上,未使用的符号不会从二进制文件中消除 - 当你dl_open()二进制文件时它们可能会被使用。如果要消除未使用的代码,请将-ffunction-sections和-fdata-sections添加到编译选项中,并将--gc-sections添加到链接器选项中。编译选项将确保每个函数都放在一个单独的部分中(而不是每个文件的一个部分),链接器选项将抛出未使用的部分。