strippingagain.xml 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  3. "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  4. <!ENTITY % general-entities SYSTEM "../general.ent">
  5. %general-entities;
  6. ]>
  7. <sect1 id="ch-system-strippingagain">
  8. <?dbhtml filename="strippingagain.html"?>
  9. <title>再次移除调试符号</title>
  10. <!--para>This section is optional. If the intended user is not a
  11. programmer and does not plan to do
  12. any debugging on the system software, the system size can be decreased
  13. by about 90 MB by removing the debugging symbols from binaries and
  14. libraries. This causes no inconvenience other than not being able to
  15. debug the software fully anymore.</para-->
  16. <para>本节是可选的。如果系统不是为程序员设计的,
  17. 也没有调试系统软件的计划,可以通过从二进制程序和库移除调试符号,
  18. 将系统的体积减小约 90 MB 。除了无法再调试全部软件外,
  19. 这不会造成任何不便。</para>
  20. <!--para>Most people who use the commands mentioned below do not
  21. experience any difficulties. However, it is easy to make a typo and
  22. render the new system unusable, so before running the
  23. <command>strip</command> commands, it is a good idea to make a
  24. backup of the LFS system in its current state.</para-->
  25. <para>大多数使用以下命令的用户不会遇到什么困难,但如果打错了命令,
  26. 很容易导致新系统无法使用。因此,在运行 <command>strip</command>
  27. 命令前,最好备份 LFS 系统的当前状态。</para>
  28. <!--para>First place the debugging symbols for selected libraries
  29. in separate files. This debugging information is needed if running
  30. regression tests that use <ulink -->
  31. <para>首先将一些库的调试符号保存在单独的文件中,在 BLFS 中,
  32. 如果使用 <ulink
  33. url='&blfs-book;/general/valgrind.html'>valgrind</ulink> 或 <ulink
  34. url='&blfs-book;/general/gdb.html'>gdb</ulink> 运行退化测试,
  35. 则需要这些调试信息的存在。
  36. </para>
  37. <!-- also of interest are libgfortan, libgo, libgomp, and libobjc from gcc -->
  38. <!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
  39. <screen><userinput>save_lib="ld-&glibc-version;.so libc-&glibc-version;.so libpthread-&glibc-version;.so libthread_db-&libthread_db-version;.so"
  40. cd /lib
  41. for LIB in $save_lib; do
  42. objcopy --only-keep-debug $LIB $LIB.dbg
  43. strip --strip-unneeded $LIB
  44. objcopy --add-gnu-debuglink=$LIB.dbg $LIB
  45. done
  46. save_usrlib="libquadmath.so.&libquadmath-version; libstdc++.so.&libstdcpp-version;
  47. libitm.so.&libitm-version; libatomic.so.&libatomic-version;" <!-- libcilkrts.so.&libcilkrts-version;-->
  48. cd /usr/lib
  49. for LIB in $save_usrlib; do
  50. objcopy --only-keep-debug $LIB $LIB.dbg
  51. strip --strip-unneeded $LIB
  52. objcopy --add-gnu-debuglink=$LIB.dbg $LIB
  53. done
  54. unset LIB save_lib save_usrlib</userinput></screen>
  55. <!--para>Before performing the stripping, take special care to ensure that
  56. none of the binaries that are about to be stripped are running. If
  57. unsure whether the user entered chroot with the command given in
  58. <xref linkend="ch-system-chroot" role=","/> first exit from
  59. chroot:</para-->
  60. <para>在移除调试符号前,必须特别小心,
  61. 保证没有需要移除调试符号的二进制程序还在运行:</para>
  62. <screen role="nodump"><userinput>exec /tools/bin/bash</userinput></screen>
  63. <note><title>译注</title>
  64. <para>注意这里使用 /tools/bin/bash 代替当前运行的 /bin/bash ,
  65. 因为 /bin/bash 二进制文件将会被移除调试符号。
  66. 之后使用的 /tools/bin/find 和 /tools/bin/strip 同理。</para>
  67. </note>
  68. <para>现在即可安全地移除程序和库的调试符号:</para>
  69. <screen><userinput>/tools/bin/find /usr/lib -type f -name \*.a \
  70. -exec /tools/bin/strip --strip-debug {} ';'
  71. /tools/bin/find /lib /usr/lib -type f \( -name \*.so* -a ! -name \*dbg \) \
  72. -exec /tools/bin/strip --strip-unneeded {} ';'
  73. /tools/bin/find /{bin,sbin} /usr/{bin,sbin,libexec} -type f \
  74. -exec /tools/bin/strip --strip-all {} ';'</userinput></screen>
  75. <!--para>A large number of files will be reported as having their file
  76. format not recognized. These warnings can be safely ignored. These
  77. warnings indicate that those files are scripts instead of
  78. binaries.</para-->
  79. <para>这里会有很多文件被报告为格式无法识别,这些警告可以安全地忽略。
  80. 它们表明那些文件是脚本文件,而不是二进制文件。</para>
  81. </sect1>