diff options
Diffstat (limited to 'chapter06/readjusting.xml')
-rw-r--r-- | chapter06/readjusting.xml | 68 |
1 files changed, 4 insertions, 64 deletions
diff --git a/chapter06/readjusting.xml b/chapter06/readjusting.xml index cf27100b8..18a6795de 100644 --- a/chapter06/readjusting.xml +++ b/chapter06/readjusting.xml @@ -7,48 +7,12 @@ <title>Readjusting the toolchain</title> <?dbhtml filename="readjusting.html"?> -<para>Now that the new and final C libraries have been installed, it's time to -adjust our toolchain again. We'll adjust it so that it will link any newly -compiled program against these new libraries. This is in fact the same thing we -did in the <quote>Adjusting</quote> phase in the beginning of the previous -chapter, even though it looks like the reverse: then we guided the chain from -the host's <filename class="directory">/{,usr/}lib</filename> to the new -<filename class="directory">/tools/lib</filename>, now we guide it from that -same <filename class="directory">/tools/lib</filename> to the LFS's <filename -class="directory">/{,usr/}lib</filename>.</para> - -<para>First we adjust the linker. For this we retained the -source and build directories from the second pass over Binutils. Install the -adjusted linker by running the following from within the +<para>Install the adjusted linker by running the following from within the <filename class="directory">binutils-build</filename> directory:</para> <screen><userinput>make -C ld INSTALL=/tools/bin/install install</userinput></screen> -<note><para>If you somehow missed the earlier warning to retain the Binutils -source and build directories from the second pass in -<xref linkend="chapter-temporary-tools"/>, or otherwise accidentally deleted them or just -don't have access to them, don't worry, all is not lost. Just ignore the above -command. The result will be that the next package, Binutils, will link against -the C libraries in <filename class="directory">/tools</filename> rather -than in <filename class="directory">/{,usr/}lib</filename>. This is not ideal, -however, our testing has shown that the resulting Binutils program binaries -should be identical.</para></note> - -<para>From now on every compiled program will link <emphasis>only</emphasis> -against the libraries in <filename class="directory">/usr/lib</filename> and -<filename class="directory">/lib</filename>. The extra -<parameter>INSTALL=/tools/bin/install</parameter> is needed because the Makefile -created during the second pass still contains the reference to -<command>/usr/bin/install</command>, which we obviously haven't installed yet. -Some host distributions contain a <filename class="symlink">ginstall</filename> -symbolic link which takes precedence in the Makefile and thus can cause a -problem here. The above command takes care of this also.</para> - -<para>You can now remove the Binutils source and build directories.</para> - -<para>The next thing to do is to amend our GCC specs file so that it points -to the new dynamic linker. Just like earlier on, we use a sed to accomplish -this:</para> +<para>Amend the GCC specs file:</para> <!-- Ampersands are needed to allow cut and paste --> @@ -56,40 +20,16 @@ this:</para> -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/@g;' \ `gcc --print-file specs`</userinput></screen> -<para>Again, cutting and pasting the above is recommended. And just like -before, it is a good idea to visually inspect the specs file to verify the -intended change was actually made.</para> - -<important><para>If you are working on a platform where the name of the dynamic -linker is something other than <filename>ld-linux.so.2</filename>, you -<emphasis>must</emphasis> substitute <filename>ld-linux.so.2</filename> with the -name of your platform's dynamic linker in the above commands. Refer back to -<xref linkend="ch-tools-toolchaintechnotes"/> if necessary.</para></important> - - -<caution><para>It is imperative at this point to stop and ensure that the -basic functions (compiling and linking) of the adjusted toolchain are working -as expected. For this we are going to perform a simple sanity check:</para> +<caution><para>Perform a simple sanity check:</para> <screen><userinput>echo 'main(){}' > dummy.c cc dummy.c readelf -l a.out | grep ': /lib'</userinput></screen> -<para>If everything is working correctly, there should be no errors, and the -output of the last command will be (allowing for platform specific differences -in dynamic linker name):</para> +<para>The output of the last command will be:</para> <screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen> -<para>Note especially that <filename class="directory">/lib</filename> is now -the prefix of our dynamic linker.</para> - -<para> If you did not receive the output -as shown above, or received no output at all, then something is seriously wrong. -You will need to investigate and retrace your steps to find out where the -problem is and correct it. There is no point in continuing until this is done. -Most likely something went wrong with the specs file amendment above.</para> - <para>Once you are satisfied that all is well, clean up the test files:</para> <screen><userinput>rm dummy.c a.out</userinput></screen> |