|
@@ -0,0 +1,117 @@
|
|
|
+<?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;
|
|
|
+ libmpx.so.&libmpx-version; libmpxwrappers.so.&libmpxwrap-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>在移除调试符号前,必须特别小心,
|
|
|
+ 保证没有需要移除调试符号的二进制程序还在运行。
|
|
|
+ 如果不确定是否使用 <xref linkend="ch-system-chroot"/>
|
|
|
+ 中的命令进入了 chroot 环境,首先退出 chroot 环境:</para>
|
|
|
+
|
|
|
+<screen role="nodump"><userinput>logout</userinput></screen>
|
|
|
+
|
|
|
+ <para>然后再执行以下命令重新进入:</para>
|
|
|
+
|
|
|
+<screen role="nodump"><userinput>chroot $LFS /tools/bin/env -i \
|
|
|
+ HOME=/root TERM=$TERM \
|
|
|
+ PS1='(lfs chroot) \u:\w\$ ' \
|
|
|
+ PATH=/bin:/usr/bin:/sbin:/usr/sbin \
|
|
|
+ /tools/bin/bash --login</userinput></screen>
|
|
|
+
|
|
|
+ <note><title>译注</title>
|
|
|
+ <para>注意这里使用了 /tools/bin/bash 而不是 /bin/bash ,
|
|
|
+ 因为 /bin 中的 bash 二进制文件将会被移除调试符号。
|
|
|
+ 在 <xref linkend="ch-system-bash"/> 中我们执行了新编译的
|
|
|
+ /bin/bash ,因此必须退出 chroot 环境,再以 /tools/bin/bash
|
|
|
+ 为 shell 重新进入。之后使用的 /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>
|