%general-entities; ]> 再次移除调试符号 本节是可选的。如果系统不是为程序员设计的, 也没有调试系统软件的计划,可以通过从二进制程序和库移除调试符号, 将系统的体积减小约 90 MB 。除了无法再调试全部软件外, 这不会造成任何不便。 大多数使用以下命令的用户不会遇到什么困难,但如果打错了命令, 很容易导致新系统无法使用。因此,在运行 strip 命令前,最好备份 LFS 系统的当前状态。 首先将一些库的调试符号保存在单独的文件中,在 BLFS 中, 如果使用 valgrindgdb 运行退化测试, 则需要这些调试信息的存在。 save_lib="ld-&glibc-version;.so libc-&glibc-version;.so libpthread-&glibc-version;.so libthread_db-&libthread_db-version;.so" cd /lib for LIB in $save_lib; do objcopy --only-keep-debug $LIB $LIB.dbg strip --strip-unneeded $LIB objcopy --add-gnu-debuglink=$LIB.dbg $LIB done save_usrlib="libquadmath.so.&libquadmath-version; libstdc++.so.&libstdcpp-version; libitm.so.&libitm-version; libatomic.so.&libatomic-version;" cd /usr/lib for LIB in $save_usrlib; do objcopy --only-keep-debug $LIB $LIB.dbg strip --strip-unneeded $LIB objcopy --add-gnu-debuglink=$LIB.dbg $LIB done unset LIB save_lib save_usrlib 在移除调试符号前,必须特别小心, 保证没有需要移除调试符号的二进制程序还在运行: exec /tools/bin/bash 译注 注意这里使用 /tools/bin/bash 代替当前运行的 /bin/bash , 因为 /bin/bash 二进制文件将会被移除调试符号。 之后使用的 /tools/bin/find 和 /tools/bin/strip 同理。 现在即可安全地移除程序和库的调试符号: /tools/bin/find /usr/lib -type f -name \*.a \ -exec /tools/bin/strip --strip-debug {} ';' /tools/bin/find /lib /usr/lib -type f \( -name \*.so* -a ! -name \*dbg \) \ -exec /tools/bin/strip --strip-unneeded {} ';' /tools/bin/find /{bin,sbin} /usr/{bin,sbin,libexec} -type f \ -exec /tools/bin/strip --strip-all {} ';' 这里会有很多文件被报告为格式无法识别,这些警告可以安全地忽略。 它们表明那些文件是脚本文件,而不是二进制文件。