在缺省情况下,大多数程序和库都是带调试符号(gcc 参数 -g)编译的。
当调试一个带调试符号的程序时,调试器不仅能给出内存地址,还能给出函数和变量的名字。
但是,这些调试符号明显地增大了程序和库。想知道这些调试符能带来多大的差异,请看下面的统计资料:
带调试符号的动态Bash二进制文件: 1200 KB
不带调试符号的动态Bash二进制文件: 480 KB
带调试符号的glibc和gcc文件(/lib和/usr/lib下): 87 MB
不带调试符号的glibc和gcc文件(/lib和/usr/lib下): 16 MB
根据使用的编译器和连接动态程序的C库的版本的不同,文件的大小可能会有些不同,但是比较带与不带调试符号的程序的比较结果应该不会改变,大概是2~5倍大小。
由于大多数人都不会在系统软件上使用调试器,把这些符号去掉就能节省大量的空间。
从二进制文件(必须是a.out或ELF二进制)移去调试符号的方法是执行strip strip --strip-debug filename .可以使用通配符将多个文件中的调试符号剥除(类似这样的用法:strip --strip-debug $LFS/stage1/bin/*)。
为了你的方便, 第九章有一节使用一个简单的命令把所有调试符号从你系统的程序和库文件中剥去。更多关于优化的信息请见提示:http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt.