我正在构建一个 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 及其默认设置进行构建(如果相关)。