About debugging symbols Most programs and libraries by default are compiled with debugging symbols and optimizing level 2 (gcc options -g and -O2) and are compiled for a specific CPU. On Intel platforms software is compiled for i386 processors by default. If a user doesn't wish to run software on other machines other than his own, he might want to change the default compiler options so that they will be compiled with a higher optimization level, no debugging symbols and generate code for his specific architecture. Let me first explain what debugging symbols are. A program compiled with debugging symbols means a user can run a program or library through a debugger and the debugger's output will be user friendlier. These debugging symbols also enlarge the program or library significantly. To remove debugging symbols from a binary (must be an a.out or ELF binary) run strip --strip-debug filename. A user can use wild cards if he needs to strip debugging symbols from multiple files (use something like strip --strip-debug $LFS/usr/bin/*). Another, easier, options is just not to compile programs with debugging symbols. Most people will probably never use a debugger on software, so by leaving those symbols out a lot of diskspace can be saved. Before someone wonders if these debugging symbols would make a big difference, here are some statistics: A dynamic Bash binary with debugging symbols: 1.2MB A dynamic Bash binary without debugging symbols: 478KB /lib and /usr/lib (glibc and gcc files) with debugging symbols: 87MB /lib and /usr/lib (glibc and gcc files) without debugging symbols: 16MB Sizes may vary depending on which compiler was used and which C library version was used to link dynamic programs against, but results will be similar if a user compares programs with and without debugging symbols. After I was done with this chapter and stripped all debugging symbols from all LFS binaries and libraries I regained a little over 102 MB of disk space. Quite the difference.