首页 > 解决方案 > gcc -O2 比 gcc -O2 -g 小,然后是 strip --strip-all

问题描述

我正在构建要生成发布版本的代码。cores但是,如果它们崩溃,我也希望能够进行调试。

所以我读到可以使用带有调试符号的构建,然后生成运行 strip 的二进制文件的副本。然后,您可以获取剥离的二进制文件(已发布/客户二进制文件)生成的核心,然后将其与带有调试符号的二进制文件副本 gdb...

所以对我来说第一步是生成二进制文件,我这样做:

这会产生三个不同大小的文件:

我的问题是,为什么testbin_release大小不完全一样testbin_release_orig?我猜 strip 不能去掉 gcc 添加的所有调试符号。但是有大约 0.4Mb 的“额外的东西”——它是由什么组成的?

标签: c++linuxgccstrip

解决方案


区别在于调试代码。

对于 1.7 MB 的可执行文件,您可能正在使用一两个库。通常他们有类似的东西:

#ifdef _DEBUG
    // some debug code
#endif

也是大型项目的常见做法,因此其中一些也可能是您的代码。

strip仅删除符号。调试代码保留。


推荐阅读