我有一个库,它定义了一个基类和一组派生类。有一个标题可以声明它们全部。现在,库用户可能不需要所有派生类。我原本以为与g++ -Wl,--gc-sections
的链接会消除那些未使用的类,包括vtable和虚函数。然而,我仍然在最终结果中看到这些类(用nm
检查)。
我认为这是因为所有vtable
都是弱符号,几乎无处不在。由于--gc-sections
无法消除这些vtable,因此它们会拖动相关的虚拟函数,并且从那里开始下滑。这是真的吗?
我没有使用.so,所以不应该需要-fvisibility
,对吗?
我已经习惯了Visual Studio,它似乎在删除未使用的函数方面效率更高。
答案 0 :(得分:1)
我原本以为与g ++ -Wl,-gc-sections的链接会消除那些未使用的类
--gc-sections
只能消除未使用的部分。
您可能希望使用-ffunction-sections
和-fdata-sections
进行编译。这样,每个函数都将在其自己的部分中,--gc-sections
将能够消除(如果未使用)。