123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
- <!ENTITY % general-entities SYSTEM "../general.ent">
- %general-entities;
- ]>
- <sect1 id="ch-system-strippingagain">
- <?dbhtml filename="strippingagain.html"?>
- <title>再次移除调试符号</title>
- <!--para>This section is optional. If the intended user is not a
- programmer and does not plan to do
- any debugging on the system software, the system size can be decreased
- by about 90 MB by removing the debugging symbols from binaries and
- libraries. This causes no inconvenience other than not being able to
- debug the software fully anymore.</para-->
- <para>本节是可选的。如果系统不是为程序员设计的,
- 也没有调试系统软件的计划,可以通过从二进制程序和库移除调试符号,
- 将系统的体积减小约 90 MB 。除了无法再调试全部软件外,
- 这不会造成任何不便。</para>
- <!--para>Most people who use the commands mentioned below do not
- experience any difficulties. However, it is easy to make a typo and
- render the new system unusable, so before running the
- <command>strip</command> commands, it is a good idea to make a
- backup of the LFS system in its current state.</para-->
- <para>大多数使用以下命令的用户不会遇到什么困难,但如果打错了命令,
- 很容易导致新系统无法使用。因此,在运行 <command>strip</command>
- 命令前,最好备份 LFS 系统的当前状态。</para>
- <!--para>First place the debugging symbols for selected libraries
- in separate files. This debugging information is needed if running
- regression tests that use <ulink -->
- <para>首先将一些库的调试符号保存在单独的文件中,在 BLFS 中,
- 如果使用 <ulink
- url='&blfs-book;/general/valgrind.html'>valgrind</ulink> 或 <ulink
- url='&blfs-book;/general/gdb.html'>gdb</ulink> 运行退化测试,
- 则需要这些调试信息的存在。
- </para>
- <!-- also of interest are libgfortan, libgo, libgomp, and libobjc from gcc -->
- <!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
- <screen><userinput>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;" <!-- libcilkrts.so.&libcilkrts-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</userinput></screen>
- <!--para>Before performing the stripping, take special care to ensure that
- none of the binaries that are about to be stripped are running. If
- unsure whether the user entered chroot with the command given in
- <xref linkend="ch-system-chroot" role=","/> first exit from
- chroot:</para-->
- <para>在移除调试符号前,必须特别小心,
- 保证没有需要移除调试符号的二进制程序还在运行:</para>
- <screen role="nodump"><userinput>exec /tools/bin/bash</userinput></screen>
-
- <note><title>译注</title>
- <para>注意这里使用 /tools/bin/bash 代替当前运行的 /bin/bash ,
- 因为 /bin/bash 二进制文件将会被移除调试符号。
- 之后使用的 /tools/bin/find 和 /tools/bin/strip 同理。</para>
- </note>
- <para>现在即可安全地移除程序和库的调试符号:</para>
- <screen><userinput>/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 {} ';'</userinput></screen>
- <!--para>A large number of files will be reported as having their file
- format not recognized. These warnings can be safely ignored. These
- warnings indicate that those files are scripts instead of
- binaries.</para-->
- <para>这里会有很多文件被报告为格式无法识别,这些警告可以安全地忽略。
- 它们表明那些文件是脚本文件,而不是二进制文件。</para>
- </sect1>
|