2

基本クラスと一連の派生クラスを定義するライブラリがあります。それらすべてを宣言する単一のヘッダーがあります。現在、ライブラリ ユーザーはすべての派生クラスを必要としない場合があります。とリンクするとg++ -Wl,--gc-sections、vtable や仮想関数などの未使用のクラスがなくなると予想していました。それでも、最終結果にこれらのクラスが表示されます ( で確認nm)。

それは、すべてvtableが弱いシンボルであり、ほとんどどこでも定義されているためだと思います。そして、--gc-sectionsこれらの vtables を排除できないため、関連付けられた仮想関数を引きずり込み、そこからすべて下り坂になります。これは本当ですか?

私は .so を使用していないので、-fvisibility必要ないはずですよね?

私は、未使用の関数を削除するのにはるかに効率的であるように思われる Visual Studio に慣れています。

4

1 に答える 1

1

g++ -Wl,--gc-sections とリンクすると、これらの未使用のクラスが削除されると予想していました

は、未使用のセクション--gc-sectionsのみを削除できます。

およびでコンパイルする可能性が-ffunction-sectionsあり-fdata-sectionsます。そうすれば、すべての関数が独自のセクションに配置され、--gc-sections(使用されていない場合) 削除することができます。

于 2013-11-16T07:18:57.220 に答える