如何从最终二进制中排除未使用的方法?

Cha*_*rly 9 c++ gcc

我认为private在其类中未使用的方法将被编译器/链接器删除,并且不会成为最终二进制文件的一部分.

我创建了一个示例类,其中包含一个已实现但未使用的私有方法.

class XXX
{
  public:
  XXX();

  private:
  void MyUnusedMethod();
};
Run Code Online (Sandbox Code Playgroud)

并在实现文件中:

void XXX::MyUnusedMethod()
{
  const char* hugo = "ABCCHARLYABC";
  printf( hugo );
}
Run Code Online (Sandbox Code Playgroud)

编译后,字符串仍然存在于最终二进制文件中.为什么?我该如何防止这种情况?

最诚挚的问候,查理

Max*_*kin 7

一种可移植的方法是为每个函数提供.o文件.然后从那些.o文件中构建一个存档.a.链接到该存档时,链接器仅链接那些解析符号的.o文件,即具有无人调用的函数的.o文件未链接.

另一种方法是使用最新版本的gcc和链接时代码生成.

  • 链接时代码生成+1,这对我来说似乎是理想的解决方案! (2认同)

ks1*_*322 7

这通常通过将-ffunction-sections -fdata-sections选项传递给gcc来完成.查看此链接了解更多详情.