基本クラスと一連の派生クラスを定義するライブラリがあります。それらすべてを宣言する単一のヘッダーがあります。現在、ライブラリ ユーザーはすべての派生クラスを必要としない場合があります。とリンクするとg++ -Wl,--gc-sections
、vtable や仮想関数などの未使用のクラスがなくなると予想していました。それでも、最終結果にこれらのクラスが表示されます ( で確認nm
)。
それは、すべてvtable
が弱いシンボルであり、ほとんどどこでも定義されているためだと思います。そして、--gc-sections
これらの vtables を排除できないため、関連付けられた仮想関数を引きずり込み、そこからすべて下り坂になります。これは本当ですか?
私は .so を使用していないので、-fvisibility
必要ないはずですよね?
私は、未使用の関数を削除するのにはるかに効率的であるように思われる Visual Studio に慣れています。