source: chapter06/readjusting.xml@ 67129a2b

6.0
Last change on this file since 67129a2b was ef13657, checked in by Gerard Beekmans <gerard@…>, 20 years ago

Completed global edits for upcoming 6.0 release

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

  • Property mode set to 100644
File size: 4.8 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
3 <!ENTITY % general-entities SYSTEM "../general.ent">
4 %general-entities;
5]>
6<sect1 id="ch-system-readjusting">
7<title>Re-adjusting the toolchain</title>
8<?dbhtml filename="readjusting.html"?>
9
10<para>Now that the new and final C libraries have been installed, it
11is time to adjust the toolchain again. The toolchain will be adjusted
12so that it will link any newly compiled program against these new
13libraries. This is the same process used in the
14<quote>Adjusting</quote> phase in the beginning of <xref
15linkend="chapter-temporary-tools"/>, even though it looks to be
16reversed -- in that chapter, the chain was guided from the host's
17<filename class="directory">/{,usr/}lib</filename> directories to the
18new <filename class="directory">/tools/lib</filename> directory. Now,
19the chain will be guided from that same <filename
20class="directory">/tools/lib</filename> directory to the LFS's
21<filename class="directory">/{,usr/}lib</filename> directories.</para>
22
23<para>Start by adjusting the linker. The source and build directories
24from the second pass over Binutils were retained for this purpose.
25Install the adjusted linker by running the following command from
26within the <filename class="directory">binutils-build</filename>
27directory:</para>
28
29<screen><userinput>make -C ld INSTALL=/tools/bin/install install</userinput></screen>
30
31<note><para>If the earlier warning to retain the Binutils source and
32build directories from the second pass in <xref
33linkend="chapter-temporary-tools"/> was missed, or if they were
34accidentally deleted or are inaccessible, ignore the above command.
35The result will be that the next package, Binutils, will link against
36the C libraries in <filename class="directory">/tools</filename>
37rather than in <filename class="directory">/{,usr/}lib</filename>.
38This is not ideal, however, testing has shown that the resulting
39Binutils program binaries should be identical.</para></note>
40
41<para>From now on, every compiled program will link only against the
42libraries in <filename class="directory">/usr/lib</filename> and
43<filename class="directory">/lib</filename>. The extra
44<parameter>INSTALL=/tools/bin/install</parameter> option is needed
45because the <filename>Makefile</filename> file created during the
46second pass still contains the reference to
47<command>/usr/bin/install</command>, which has not been installed yet.
48Some host distributions contain a <filename
49class="symlink">ginstall</filename> symbolic link which takes
50precedence in the <filename>Makefile</filename> file and can cause a
51problem here. The above command takes care of this issue.</para>
52
53<para>Remove the Binutils source and build directories now.</para>
54
55<para>Next, amend the GCC specs file so that it points to the new
56dynamic linker. A sed to accomplish this just like before:</para>
57
58<!-- Ampersands are needed to allow cut and paste -->
59
60<screen><userinput>sed -i 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g' \
61 `gcc --print-file specs`</userinput></screen>
62
63<para>Cutting and pasting the above is recommended. It is a good idea
64to visually inspect the specs file to verify the intended change was
65actually made.</para>
66
67<important><para>If working on a platform where the name of the
68dynamic linker is something other than
69<filename>ld-linux.so.2</filename>, substitute
70<filename>ld-linux.so.2</filename> with the name of the platform's
71dynamic linker in the above commands. Refer back to <xref
72linkend="ch-tools-toolchaintechnotes"/> if
73necessary.</para></important>
74
75<caution><para>It is imperative at this point to stop and ensure that
76the basic functions (compiling and linking) of the adjusted toolchain
77are working as expected. To do this, perform a simple sanity
78check:</para>
79
80<screen><userinput>echo 'main(){}' &gt; dummy.c
81cc dummy.c
82readelf -l a.out | grep ': /lib'</userinput></screen>
83
84<para>If everything is working correctly, there should be no errors,
85and the output of the last command will be (allowing for platform
86specific differences in dynamic linker name):</para>
87
88<screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen>
89
90<para>Note especially that <filename class="directory">/lib</filename> is now
91the prefix of our dynamic linker.</para>
92
93<para>If the output does not appear as shown above or is not received
94at all, then something is seriously wrong. Investigate and retrace the
95steps to find out where the problem is and correct it. The most likely
96reason is that something went wrong with the specs file amendment
97above. Any issues will need to be resolved before continuing on with
98the process.</para>
99
100<para>Once everything is working correctly, clean up the test
101files:</para>
102
103<screen><userinput>rm dummy.c a.out</userinput></screen></caution>
104
105</sect1>
106
Note: See TracBrowser for help on using the repository browser.