Changeset ef13657 for chapter06/readjusting.xml
- Timestamp:
- 08/08/2004 02:11:09 AM (20 years ago)
- Branches:
- 6.0
- Children:
- 5ba3d1d
- Parents:
- 6e41459
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
chapter06/readjusting.xml
r6e41459 ref13657 8 8 <?dbhtml filename="readjusting.html"?> 9 9 10 <para>Now that the new and final C libraries have been installed, it's time to 11 adjust our toolchain again. We'll adjust it so that it will link any newly 12 compiled program against these new libraries. This is in fact the same thing we 13 did in the <quote>Adjusting</quote> phase in the beginning of the previous 14 chapter, even though it looks like the reverse: then we guided the chain from 15 the host's <filename class="directory">/{,usr/}lib</filename> to the new 16 <filename class="directory">/tools/lib</filename>, now we guide it from that 17 same <filename class="directory">/tools/lib</filename> to the LFS's <filename 18 class="directory">/{,usr/}lib</filename>.</para> 10 <para>Now that the new and final C libraries have been installed, it 11 is time to adjust the toolchain again. The toolchain will be adjusted 12 so that it will link any newly compiled program against these new 13 libraries. This is the same process used in the 14 <quote>Adjusting</quote> phase in the beginning of <xref 15 linkend="chapter-temporary-tools"/>, even though it looks to be 16 reversed -- in that chapter, the chain was guided from the host's 17 <filename class="directory">/{,usr/}lib</filename> directories to the 18 new <filename class="directory">/tools/lib</filename> directory. Now, 19 the chain will be guided from that same <filename 20 class="directory">/tools/lib</filename> directory to the LFS's 21 <filename class="directory">/{,usr/}lib</filename> directories.</para> 19 22 20 <para>First we adjust the linker. For this we retained the 21 source and build directories from the second pass over Binutils. Install the 22 adjusted linker by running the following from within the 23 <filename class="directory">binutils-build</filename> directory:</para> 23 <para>Start by adjusting the linker. The source and build directories 24 from the second pass over Binutils were retained for this purpose. 25 Install the adjusted linker by running the following command from 26 within the <filename class="directory">binutils-build</filename> 27 directory:</para> 24 28 25 29 <screen><userinput>make -C ld INSTALL=/tools/bin/install install</userinput></screen> 26 30 27 <note><para>If you somehow missed the earlier warning to retain the Binutils28 source and build directories from the second pass in 29 <xref linkend="chapter-temporary-tools"/>, or otherwise accidentally deleted them or just 30 don't have access to them, don't worry, all is not lost. Just ignore the above 31 command.The result will be that the next package, Binutils, will link against32 the C libraries in <filename class="directory">/tools</filename> rather33 than in <filename class="directory">/{,usr/}lib</filename>. This is not ideal, 34 however, our testing has shown that the resulting Binutils program binaries 35 should be identical.</para></note>31 <note><para>If the earlier warning to retain the Binutils source and 32 build directories from the second pass in <xref 33 linkend="chapter-temporary-tools"/> was missed, or if they were 34 accidentally deleted or are inaccessible, ignore the above command. 35 The result will be that the next package, Binutils, will link against 36 the C libraries in <filename class="directory">/tools</filename> 37 rather than in <filename class="directory">/{,usr/}lib</filename>. 38 This is not ideal, however, testing has shown that the resulting 39 Binutils program binaries should be identical.</para></note> 36 40 37 <para>From now on every compiled program will link <emphasis>only</emphasis>38 against thelibraries in <filename class="directory">/usr/lib</filename> and41 <para>From now on, every compiled program will link only against the 42 libraries in <filename class="directory">/usr/lib</filename> and 39 43 <filename class="directory">/lib</filename>. The extra 40 <parameter>INSTALL=/tools/bin/install</parameter> is needed because the Makefile 41 created during the second pass still contains the reference to 42 <command>/usr/bin/install</command>, which we obviously haven't installed yet. 43 Some host distributions contain a <filename class="symlink">ginstall</filename> 44 symbolic link which takes precedence in the Makefile and thus can cause a 45 problem here. The above command takes care of this also.</para> 44 <parameter>INSTALL=/tools/bin/install</parameter> option is needed 45 because the <filename>Makefile</filename> file created during the 46 second pass still contains the reference to 47 <command>/usr/bin/install</command>, which has not been installed yet. 48 Some host distributions contain a <filename 49 class="symlink">ginstall</filename> symbolic link which takes 50 precedence in the <filename>Makefile</filename> file and can cause a 51 problem here. The above command takes care of this issue.</para> 46 52 47 <para> You can now remove the Binutils source and build directories.</para>53 <para>Remove the Binutils source and build directories now.</para> 48 54 49 <para>The next thing to do is to amend our GCC specs file so that it points 50 to the new dynamic linker. Just like earlier on, we use a sed to accomplish 51 this:</para> 55 <para>Next, amend the GCC specs file so that it points to the new 56 dynamic linker. A sed to accomplish this just like before:</para> 52 57 53 58 <!-- Ampersands are needed to allow cut and paste --> … … 56 61 `gcc --print-file specs`</userinput></screen> 57 62 58 <para> Again, cutting and pasting the above is recommended. And just like59 before, it is a good idea to visually inspect the specs file to verify the 60 intended change wasactually made.</para>63 <para>Cutting and pasting the above is recommended. It is a good idea 64 to visually inspect the specs file to verify the intended change was 65 actually made.</para> 61 66 62 <important><para>If you are working on a platform where the name of the dynamic 63 linker is something other than <filename>ld-linux.so.2</filename>, you 64 <emphasis>must</emphasis> substitute <filename>ld-linux.so.2</filename> with the 65 name of your platform's dynamic linker in the above commands. Refer back to 66 <xref linkend="ch-tools-toolchaintechnotes"/> if necessary.</para></important> 67 <important><para>If working on a platform where the name of the 68 dynamic 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 71 dynamic linker in the above commands. Refer back to <xref 72 linkend="ch-tools-toolchaintechnotes"/> if 73 necessary.</para></important> 67 74 68 69 <caution><para>It is imperative at this point to stop and ensure that the 70 basic functions (compiling and linking) of the adjusted toolchain are working 71 as expected. For this we are going to perform a simple sanitycheck:</para>75 <caution><para>It is imperative at this point to stop and ensure that 76 the basic functions (compiling and linking) of the adjusted toolchain 77 are working as expected. To do this, perform a simple sanity 78 check:</para> 72 79 73 80 <screen><userinput>echo 'main(){}' > dummy.c … … 75 82 readelf -l a.out | grep ': /lib'</userinput></screen> 76 83 77 <para>If everything is working correctly, there should be no errors, and the78 output of the last command will be (allowing for platform specific differences 79 in dynamic linker name):</para>84 <para>If everything is working correctly, there should be no errors, 85 and the output of the last command will be (allowing for platform 86 specific differences in dynamic linker name):</para> 80 87 81 88 <screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen> … … 84 91 the prefix of our dynamic linker.</para> 85 92 86 <para> If you did not receive the output 87 as shown above, or received no output at all, then something is seriously wrong. 88 You will need to investigate and retrace your steps to find out where the 89 problem is and correct it. There is no point in continuing until this is done. 90 Most likely something went wrong with the specs file amendment above.</para> 93 <para>If the output does not appear as shown above or is not received 94 at all, then something is seriously wrong. Investigate and retrace the 95 steps to find out where the problem is and correct it. The most likely 96 reason is that something went wrong with the specs file amendment 97 above. Any issues will need to be resolved before continuing on with 98 the process.</para> 91 99 92 <para>Once you are satisfied that all is well, clean up the test files:</para> 100 <para>Once everything is working correctly, clean up the test 101 files:</para> 93 102 94 <screen><userinput>rm dummy.c a.out</userinput></screen> 95 </caution> 96 103 <screen><userinput>rm dummy.c a.out</userinput></screen></caution> 97 104 98 105 </sect1> 106
Note:
See TracChangeset
for help on using the changeset viewer.