Ignore:
Timestamp:
02/01/2004 09:49:10 PM (20 years ago)
Author:
Alex Gronenwoud <alex@…>
Branches:
10.0, 10.0-rc1, 10.1, 10.1-rc1, 11.0, 11.0-rc1, 11.0-rc2, 11.0-rc3, 11.1, 11.1-rc1, 11.2, 11.2-rc1, 11.3, 11.3-rc1, 12.0, 12.0-rc1, 12.1, 12.1-rc1, 6.0, 6.1, 6.1.1, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.5-systemd, 7.6, 7.6-systemd, 7.7, 7.7-systemd, 7.8, 7.8-systemd, 7.9, 7.9-systemd, 8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1, arm, bdubbs/gcc13, ml-11.0, multilib, renodr/libudev-from-systemd, s6-init, trunk, v5_1, v5_1_1, xry111/arm64, xry111/arm64-12.0, xry111/clfs-ng, xry111/lfs-next, xry111/loongarch, xry111/loongarch-12.0, xry111/loongarch-12.1, xry111/mips64el, xry111/pip3, xry111/rust-wip-20221008, xry111/update-glibc
Children:
247acde
Parents:
c288d97
Message:

Replacing several <userinput> tags by <command>.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@3203 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

File:
1 edited

Legend:

Unmodified
Added
Removed
  • chapter05/chapter05.xml

    rc288d97 r90e3cb3  
    2424
    2525<para>The build instructions assume that you are using the
    26 <userinput>bash</userinput> shell. It is also expected that you have already
     26<command>bash</command> shell. It is also expected that you have already
    2727unpacked a source package (while logged in as user <emphasis>lfs</emphasis> --
    2828explained shortly) and performed a <userinput>cd</userinput> into the source
     
    101101<filename class="directory">/lib</filename> directory on your host system. A
    102102surefire way is to inspect a random binary from your host system by running:
    103 <userinput>'readelf -l &lt;name of binary&gt; | grep interpreter'</userinput>
     103<userinput>readelf -l &lt;name of binary&gt; | grep interpreter</userinput>
    104104and noting the output. The authoritative reference covering all platforms is in
    105105the <filename>shlib-versions</filename> file in the root of the Glibc source
     
    119119choose.</para></listitem>
    120120
    121 <listitem><para>Careful manipulation of <userinput>gcc</userinput>'s
     121<listitem><para>Careful manipulation of <command>gcc</command>'s
    122122<emphasis>specs</emphasis> file to tell the compiler which target dynamic
    123123linker will be used.</para></listitem>
     
    126126<para>Binutils is installed first because both GCC and Glibc perform various
    127127feature tests on the assembler and linker during their respective runs of
    128 <userinput>./configure</userinput> to determine which software features to enable
     128<command>./configure</command> to determine which software features to enable
    129129or disable. This is more important than one might first realize. An incorrectly
    130130configured GCC or Glibc can result in a subtly broken toolchain where the impact
     
    138138the tools in one location are hard linked to the other. An important facet of
    139139the linker is its library search order. Detailed information can be obtained
    140 from <userinput>ld</userinput> by passing it the <emphasis>--verbose</emphasis>
    141 flag. For example: <userinput>'ld --verbose | grep SEARCH'</userinput> will
     140from <command>ld</command> by passing it the <emphasis>--verbose</emphasis>
     141flag. For example: <command>ld --verbose | grep SEARCH</command> will
    142142show you the current search paths and their order. You can see what files are
    143 actually linked by <userinput>ld</userinput> by compiling a dummy program and
    144 passing the <emphasis>--verbose</emphasis> switch. For example:
    145 <userinput>'gcc dummy.c -Wl,--verbose 2>&amp;1 | grep succeeded'</userinput>
    146 will show you all the files successfully opened during the link.</para>
     143actually linked by <command>ld</command> by compiling a dummy program and
     144passing the <emphasis>--verbose</emphasis> switch to the linker. For example:
     145<command>gcc dummy.c -Wl,--verbose 2>&amp;1 | grep succeeded</command>
     146will show you all the files successfully opened during the linking.</para>
    147147
    148148<para>The next package installed is GCC and during its run of
    149 <userinput>./configure</userinput> you'll see, for example:</para>
     149<command>./configure</command> you'll see, for example:</para>
    150150
    151151<blockquote><screen>checking what assembler to use... /tools/i686-pc-linux-gnu/bin/as
     
    154154<para>This is important for the reasons mentioned above. It also demonstrates
    155155that GCC's configure script does not search the $PATH directories to find which
    156 tools to use. However, during the actual operation of <userinput>gcc</userinput>
     156tools to use. However, during the actual operation of <command>gcc</command>
    157157itself, the same search paths are not necessarily used. You can find out which
    158 standard linker <userinput>gcc</userinput> will use by running:
    159 <userinput>'gcc -print-prog-name=ld'</userinput>.
    160 Detailed information can be obtained from <userinput>gcc</userinput> by passing
     158standard linker <command>gcc</command> will use by running:
     159<command>gcc -print-prog-name=ld</command>.
     160Detailed information can be obtained from <command>gcc</command> by passing
    161161it the <emphasis>-v</emphasis> flag while compiling a dummy program. For
    162 example: <userinput>'gcc -v dummy.c'</userinput> will show you detailed
     162example: <command>gcc -v dummy.c</command> will show you detailed
    163163information about the preprocessor, compilation and assembly stages, including
    164 <userinput>gcc</userinput>'s include search paths and their order.</para>
     164<command>gcc</command>'s include search paths and their order.</para>
    165165 
    166166<para>The next package installed is Glibc. The most important considerations for
    167167building Glibc are the compiler, binary tools and kernel headers. The compiler
    168 is generally no problem as Glibc will always use the <userinput>gcc</userinput>
     168is generally no problem as Glibc will always use the <command>gcc</command>
    169169found in a $PATH directory. The binary tools and kernel headers can be a little
    170170more troublesome. Therefore we take no risks and use the available configure
    171171switches to enforce the correct selections. After the run of
    172 <userinput>./configure</userinput> you can check the contents of the
     172<command>./configure</command> you can check the contents of the
    173173<filename>config.make</filename> file in the
    174174<filename class="directory">glibc-build</filename> directory for all the
    175175important details. You'll note some interesting items like the use of
    176 <userinput>CC="gcc -B/tools/bin/"</userinput> to control which binary tools are
     176<emphasis>CC="gcc -B/tools/bin/"</emphasis> to control which binary tools are
    177177used, and also the use of the <emphasis>-nostdinc</emphasis> and
    178178<emphasis>-isystem</emphasis> flags to control the compiler's include search
     
    183183<para>After the Glibc installation, we make some adjustments to ensure that
    184184searching and linking take place only within our <filename>/tools</filename>
    185 prefix. We install an adjusted <userinput>ld</userinput>, which has a hard-wired
     185prefix. We install an adjusted <command>ld</command>, which has a hard-wired
    186186search path limited to <filename class="directory">/tools/lib</filename>. Then
    187 we amend <userinput>gcc</userinput>'s specs file to point to our new dynamic
     187we amend <command>gcc</command>'s specs file to point to our new dynamic
    188188linker in <filename class="directory">/tools/lib</filename>. This last step is
    189189<emphasis>vital</emphasis> to the whole process. As mentioned above, a
    190190hard-wired path to a dynamic linker is embedded into every ELF shared
    191191executable. You can inspect this by running:
    192 <userinput>'readelf -l &lt;name of binary&gt; | grep interpreter'</userinput>.
    193 By amending <userinput>gcc</userinput>'s specs file, we are ensuring that every
    194 program compiled from here through the end of <xref linkend="chapter05"/> will
    195 use our new dynamic linker in
    196 <filename class="directory">/tools/lib</filename>.</para>
     192<command>readelf -l &lt;name of binary&gt; | grep interpreter</command>.
     193By amending <command>gcc</command>'s specs file, we are ensuring that every
     194program compiled from here through the end of this chapter will use our new
     195dynamic linker in <filename class="directory">/tools/lib</filename>.</para>
    197196
    198197<para>The need to use the new dynamic linker is also the reason why we apply the
     
    204203<para>During the second pass of Binutils, we are able to utilize the
    205204<emphasis>--with-lib-path</emphasis> configure switch to control
    206 <userinput>ld</userinput>'s library search path. From this point onwards, the
     205<command>ld</command>'s library search path. From this point onwards, the
    207206core toolchain is self-contained and self-hosted. The remainder of the
    208207<xref linkend="chapter05"/> packages all build against the new Glibc in
     
    214213<filename class="directory">/usr</filename>, we perform a quick changeover of
    215214the toolchain defaults, then proceed for real in building the rest of the
    216 target <xref linkend="chapter06"/> LFS system.</para>
     215target LFS system.</para>
    217216
    218217<sect2>
     
    289288<screen><userinput>ln -s $LFS/tools /</userinput></screen>
    290289
    291 <note><para>The above command is correct. The <userinput>ln</userinput> command
     290<note><para>The above command is correct. The <command>ln</command> command
    292291has a few syntactic variations, so be sure to check the info page before
    293292reporting what you may think is an error.</para></note>
     
    350349<screen><userinput>su - lfs</userinput></screen>
    351350
    352 <para>The "<userinput>-</userinput>" instructs <userinput>su</userinput> to
    353 start a <emphasis>login</emphasis> shell.</para>
     351<para>The "<command>-</command>" instructs <command>su</command> to start a
     352<emphasis>login</emphasis> shell.</para>
    354353
    355354</sect1>
     
    361360
    362361<para>We're going to set up a good working environment by creating two new
    363 startup files for the <userinput>bash</userinput> shell. While logged in as
     362startup files for the <command>bash</command> shell. While logged in as
    364363user <emphasis>lfs</emphasis>, issue the following command to create a new
    365364<filename>.bash_profile</filename>:</para>
     
    373372<filename>/etc/profile</filename> of your host (probably containing some
    374373settings of environment variables) and then <filename>.bash_profile</filename>.
    375 The <userinput>exec env -i ... /bin/bash</userinput> command in the latter file
     374The <command>exec env -i ... /bin/bash</command> command in the latter file
    376375replaces the running shell with a new one with a completely empty environment,
    377376except for the HOME, TERM and PS1 variables. This ensures that no unwanted and
     
    394393<userinput>EOF</userinput></screen>
    395394
    396 <para>The <userinput>set +h</userinput> command turns off
    397 <userinput>bash</userinput>'s hash function. Normally hashing is a useful
    398 feature: <userinput>bash</userinput> uses a hash table to remember the
     395<para>The <command>set +h</command> command turns off
     396<command>bash</command>'s hash function. Normally hashing is a useful
     397feature: <command>bash</command> uses a hash table to remember the
    399398full pathnames of executable files to avoid searching the PATH time and time
    400399again to find the same executable. However, we'd like the new tools to be
    401400used as soon as they are installed. By switching off the hash function, our
    402 "interactive" commands (<userinput>make</userinput>,
    403 <userinput>patch</userinput>, <userinput>sed</userinput>,
    404 <userinput>cp</userinput> and so forth) will always use
     401"interactive" commands (<command>make</command>,
     402<command>patch</command>, <command>sed</command>,
     403<command>cp</command> and so forth) will always use
    405404the newest available version during the build process.</para>
    406405
     
    520519You will need to investigate and retrace your steps to find out where the
    521520problem is and correct it. There is no point in continuing until this is done.
    522 First, redo the sanity check using <userinput>gcc</userinput> instead of
    523 <userinput>cc</userinput>. If this works it means the
     521First, redo the sanity check using <command>gcc</command> instead of
     522<command>cc</command>. If this works it means the
    524523<filename class="symlink">/tools/bin/cc</filename> symlink is missing. Revisit
    525524<xref linkend="ch-tools-gcc-pass1"/> and fix the symlink. Second, ensure your $PATH
     
    588587
    589588<para>Take care <emphasis>not</emphasis> to use
    590 <userinput>--strip-unneeded</userinput> on the libraries -- they would be
     589<emphasis>--strip-unneeded</emphasis> on the libraries -- they would be
    591590destroyed and you would have to build Glibc all over again.</para>
    592591
Note: See TracChangeset for help on using the changeset viewer.