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

Including unused code during compilation

本文关键字:未使用 代码 包含 编译      更新时间:2023-10-16

从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?

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