C++実行可能ファイルを作成しています。カスタムライブラリを含め、使用しているCおよびC++ライブラリのいくつかを静的にリンクしています。(ただし、使用しているすべてのライブラリを静的にリンクしているわけではありません。)
それを考慮しても、実行可能ファイルは異常に大きいように見えました。を使用したところ、予想よりもobjdump -h
はるかに多くのスペースを使用していることがわかりました。.dynstr
でコンパイルし-Os
て実行しましたstrip
が、実行すると
$ readelf -p .dynstr slamshift
私は次のような多くのエントリを取得します
[ 13588] _ZN3yuu6windowC2Ev
[ 1359b] _ZTSN3yuu7gfx_ctxE
[ 135ae] _ZN4YAML7Scanner11ScanFlowEndEv
[ 135ce] __glewVertexFormatNV
静的にリンクしたライブラリ(私自身のライブラリ、yaml-cpp、およびGLEW)のシンボルの場合。
これらのシンボルが実行可能ファイルに表示されるのはなぜですか?関連するライブラリを静的にリンクした場合、シンボル名は不要ではありませんか?
Ubuntu 12.04、GCC 4.6.3、CMakeとそのデフォルト設定を使用してビルドしています(関連する場合)。