在链接时消除已声明但未使用的多态类

时间:2013-11-14 13:12:15

标签: g++ elf

我有一个库,它定义了一个基类和一组派生类。有一个标题可以声明它们全部。现在,库用户可能不需要所有派生类。我原本以为与g++ -Wl,--gc-sections的链接会消除那些未使用的类,包括vtable和虚函数。然而,我仍然在最终结果中看到这些类(用nm检查)。

我认为这是因为所有vtable都是弱符号,几乎无处不在。由于--gc-sections无法消除这些vtable,因此它们会拖动相关的虚拟函数,并且从那里开始下滑。这是真的吗?

我没有使用.so,所以不应该需要-fvisibility,对吗?

我已经习惯了Visual Studio,它似乎在删除未使用的函数方面效率更高。

1 个答案:

答案 0 :(得分:1)

  

我原本以为与g ++ -Wl,-gc-sections的链接会消除那些未使用的类

--gc-sections只能消除未使用的部分

您可能希望使用-ffunction-sections-fdata-sections进行编译。这样,每个函数都将在其自己的部分中,--gc-sections将能够消除(如果未使用)。