2

我有一个库,它定义了一个基类和一组派生类。有一个标头声明了所有这些。现在,图书馆用户可能不需要所有派生类。我曾预计链接g++ -Wl,--gc-sections将消除那些未使用的类,包括 vtables 和虚函数。然而,我仍然在最终结果中看到这些类(用 选中nm)。

我怀疑那是因为所有vtable都是弱符号,几乎无处不在。由于--gc-sections无法消除这些虚表,它们会拖入相关的虚拟功能,从那里开始一切都在下坡。这是真的?

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

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

4

1 回答 1

1

我曾期望与 g++ -Wl,--gc-sections 链接会消除那些未使用的类

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

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

于 2013-11-16T07:18:57.220 回答