source: chapter05/lockingglibc.xml@ 76b9eb4

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_0 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
Last change on this file since 76b9eb4 was 30550b6c, checked in by Jeremy Utley <jeremy@…>, 21 years ago

Added a note to the lockin tests stating that blank output is bad

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

  • Property mode set to 100644
File size: 3.9 KB
RevLine 
[bc82645e]1<sect1 id="ch05-locking-glibc">
2<title>"Locking in" Glibc</title>
3<?dbhtml filename="lockingglibc.html" dir="chapter05"?>
4
[1f30432]5<para>Now that the temporary C libraries have been installed, we want all
6the tools compiled in the rest of this chapter to be linked against these
[d1391f0]7libraries. To accomplish this, we need to adjust the linker and the compiler's
8specs file.</para>
[bc82645e]9
[d1391f0]10<para>First install the adjusted linker by running the following from within
11the <filename class="directory">binutils-build</filename> directory:</para>
[2cff2cc]12
[d1391f0]13<para><screen><userinput>make -C ld install</userinput></screen></para>
[bc82645e]14
[d1391f0]15<para>The linker was adjusted a little while back, at the end of the first
16pass of Binutils. From this point onwards everything will link <emphasis>only
17</emphasis> against the libraries in <filename>/tools/lib</filename>.</para>
[78deb7d]18
[d1391f0]19<para>Now that the adjusted linker is installed, you have to remove the
20Binutils build and source directories.</para>
[66e4325]21
[c9398bc]22<para>The next thing to do is to amend our GCC specs file so that it points
[66e4325]23to the new dynamic linker. A simple sed will accomplish this:</para>
24
[148bb04]25<para><screen><userinput>SPECFILE=/tools/lib/gcc-lib/*/*/specs
[f57e3d1]26sed -e 's@/lib/ld-linux.so.2@/tools/lib/ld-linux.so.2@g' \
[1f30432]27&nbsp;&nbsp;&nbsp;&nbsp;$SPECFILE > tempspecfile
28mv tempspecfile $SPECFILE
[585ce08]29unset SPECFILE</userinput></screen></para>
[bc82645e]30
[f57e3d1]31<para>We recommend that you cut-and-paste the above rather than try and type it
32all in. Or you can edit the specs file by hand if you want to: just replace any
33occurrence of "/lib/ld-linux.so.2" with "/tools/lib/ld-linux.so.2".</para>
34
35<important><para>If you are working on a platform where the name of the dynamic
36linker is something other than <filename>ld-linux.so.2</filename>, you
37<emphasis>must</emphasis> substitute <filename>ld-linux.so.2</filename> with the
[cd40510a]38name of your platform's dynamic linker in the above commands. Refer back to
39<xref linkend="ch05-toolchaintechnotes"/> if necessary.</para></important>
[66e4325]40
[be2dd91]41<para>Lastly, there is a possibility that some include files from the host
[1e163254]42system have found their way into GCC's private include dir. This can happen
[fa2e693]43because of GCC's "fixincludes" process which runs as part of the GCC build.
44We'll explain more about this further on in this chapter. For now, run the
[783c041]45following commands to eliminate this possibility:</para>
[be2dd91]46
[148bb04]47<para><screen><userinput>rm -f /tools/lib/gcc-lib/*/*/include/{pthread.h,bits/sigthread.h}</userinput></screen></para>
[40b88c2]48
[783c041]49<caution><para>It is imperative at this point to stop and ensure that the basic
50functions (compiling and linking) of the new toolchain are working as expected.
51For this we are going to perform a simple sanity check:</para>
[1f53626]52
53<para><screen><userinput>echo 'main(){}' > dummy.c
54gcc dummy.c
55readelf -l a.out | grep ': /tools'</userinput></screen></para>
56
[783c041]57<para>If everything is working correctly, there should be no errors, and the
58output of the last command will be:</para>
[1f53626]59
[7e602eab]60<blockquote><screen>[Requesting program interpreter: /tools/lib/ld-linux.so.2]</screen></blockquote>
[1f53626]61
[783c041]62<para>If you did not receive the output as shown above, then something is
[30550b6c]63seriously wrong. This includes if the output of the command is blank!
64You will need to investigate and retrace your steps to find
[1f53626]65out where the problem is and correct it. There is no point in continuing
[783c041]66until this is done. Most likely something went wrong with the specs file
[1f53626]67amendment above. Note especially that <filename>/tools/lib</filename> appears
68as the prefix of our dynamic linker. Of course, if you are working on a
69platform where the name of the dynamic linker is something other than
[783c041]70<filename>ld-linux.so.2</filename>, then the output will be slightly different.
[1f53626]71</para>
72
73<para>Once you are satisfied that all is well, clean up the test files:</para>
74
75<para><screen><userinput>rm dummy.c a.out</userinput></screen></para>
76</caution>
77
[783c041]78<para>This completes the installation of the self-contained toolchain, and it
[66e4325]79can now be used to build the rest of the temporary tools.</para>
80
[bc82645e]81</sect1>
82
Note: See TracBrowser for help on using the repository browser.