私はC++実行ファイルを構築しています。私は静的に私が使っているCとC++のライブラリのいくつかをリンクしています。しかし、私は使用しているすべてのライブラリを静的にリンクしているわけではありません。実行ファイルの.dynstrに、静的リンクライブラリのシンボルが含まれているのはなぜですか?
実行可能ファイルは異常に大きいようです。私は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とそのデフォルト設定を使用してビルドしています(該当する場合)。
実際問題は、デフォルトで-rdynamicを含むCMakeであることが判明し、他のほとんどのリンカーフラグよりも明らかに優先されます。 –