5

私はアプリでかなり複雑なデータ構造(主にSTLコンテナーを使用)を使用し、Boost(v1.34)を使用してそれらをシリアル化します。

デバッグシンボル(gcc -g)を使用してコンパイルするたびに、結果の実行可能ファイルは巨大になります(約25 MB)。すべてのデバッグシンボルを削除すると、サイズが最大3MBに減少します。

サイズが大きくなった原因を突き止めてみましたが、シリアル化の方法が原因のようです。特に、シリアル化を呼び出すモジュールのオブジェクトファイル(「oarchive << myObject」などのコード)は大きく、シリアル化部分をコメントアウトするとサイズが大幅に小さくなります。

これらのシンボルの生成を防止すること、またはそれらを選択的に取り除くことは可能ですか?
自分のコードのデバッグシンボルが必要なため、すべてのシンボルを削除することはできません。

4

2 に答える 2

4
  1. 別々のモジュールへのシリアル化呼び出しを使用してコードを配置し、それらを大きなオブジェクトファイルにコンパイルします。
  2. それらにstrip--strip-debugを使用して、この大きなデバッグシンボルのみを削除します(シリアル化ライブラリ内のクラッシュをデバッグするために後で必ず必要になります:)
  3. 利益!ストリップされたラッパーとストリップされていない他のモジュールをリンクします。
于 2011-05-19T15:46:42.483 に答える
2
strip -w -K '!*serialization*'

簡単で、コンパイル時の体操は必要ありません。これが私のバイナリに加えた改善です:

# ls -lh EnrollGUI 
-rwxr-xr-x. 1 root root 17M Aug  8  2012 EnrollGUI*
# strip -w -K '!*serialization*' EnrollGUI
# ls -lh EnrollGUI 
-rwxr-xr-x. 1 root root 1.1M Aug  8  2012 EnrollGUI*
于 2012-08-08T19:56:32.110 に答える