我有一个库,它定义了一个基类和一组派生类。有一个标头声明了所有这些。现在,图书馆用户可能不需要所有派生类。我曾预计链接g++ -Wl,--gc-sections
将消除那些未使用的类,包括 vtables 和虚函数。然而,我仍然在最终结果中看到这些类(用 选中nm
)。
我怀疑那是因为所有vtable
都是弱符号,几乎无处不在。由于--gc-sections
无法消除这些虚表,它们会拖入相关的虚拟功能,从那里开始一切都在下坡。这是真的?
我没有使用.so,所以-fvisibility
不需要,对吧?
我习惯了 Visual Studio,它似乎在删除未使用的函数方面效率更高。