source: chapter05/lockingglibc.xml@ 72b845e6

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 72b845e6 was 783c041, checked in by Alex Gronenwoud <alex@…>, 21 years ago

Minor adjustments to the 'Lock-in' section.

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

  • Property mode set to 100644
File size: 3.6 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
26sed -e 's@/lib/ld.so.1@/tools/lib/ld.so.1@g' \
27&nbsp;&nbsp;&nbsp;&nbsp;-e 's@/lib/ld-linux.so.2@/tools/lib/ld-linux.so.2@g' \
[1f30432]28&nbsp;&nbsp;&nbsp;&nbsp;$SPECFILE > tempspecfile
29mv tempspecfile $SPECFILE
[585ce08]30unset SPECFILE</userinput></screen></para>
[bc82645e]31
[7064daf]32<para>We recommend that you cut-and-paste the above rather than try and type it
33all in. Or you can edit the specs file by hand if you want to: just replace
34"/lib/ld-linux.so.2" with "/tools/lib/ld-linux.so.2" and "/lib/ld.so.1" with
35"/tools/lib/ld.so.1".</para>
[66e4325]36
[be2dd91]37<para>Lastly, there is a possibility that some include files from the host
[1e163254]38system have found their way into GCC's private include dir. This can happen
[fa2e693]39because of GCC's "fixincludes" process which runs as part of the GCC build.
40We'll explain more about this further on in this chapter. For now, run the
[783c041]41following commands to eliminate this possibility:</para>
[be2dd91]42
[148bb04]43<para><screen><userinput>rm -f /tools/lib/gcc-lib/*/*/include/{pthread.h,bits/sigthread.h}</userinput></screen></para>
[40b88c2]44
[783c041]45<caution><para>It is imperative at this point to stop and ensure that the basic
46functions (compiling and linking) of the new toolchain are working as expected.
47For this we are going to perform a simple sanity check:</para>
[1f53626]48
49<para><screen><userinput>echo 'main(){}' > dummy.c
50gcc dummy.c
51readelf -l a.out | grep ': /tools'</userinput></screen></para>
52
[783c041]53<para>If everything is working correctly, there should be no errors, and the
54output of the last command will be:</para>
[1f53626]55
56<para><screen>[Requesting program interpreter: /tools/lib/ld-linux.so.2]
57</screen></para>
58
[783c041]59<para>If you did not receive the output as shown above, then something is
[1f53626]60seriously wrong. You will need to investigate and retrace your steps to find
61out where the problem is and correct it. There is no point in continuing
[783c041]62until this is done. Most likely something went wrong with the specs file
[1f53626]63amendment above. Note especially that <filename>/tools/lib</filename> appears
64as the prefix of our dynamic linker. Of course, if you are working on a
65platform where the name of the dynamic linker is something other than
[783c041]66<filename>ld-linux.so.2</filename>, then the output will be slightly different.
[1f53626]67</para>
68
69<para>Once you are satisfied that all is well, clean up the test files:</para>
70
71<para><screen><userinput>rm dummy.c a.out</userinput></screen></para>
72</caution>
73
[783c041]74<para>This completes the installation of the self-contained toolchain, and it
[66e4325]75can now be used to build the rest of the temporary tools.</para>
76
[bc82645e]77</sect1>
78
Note: See TracBrowser for help on using the repository browser.