MTD 248-645A Manual de usuario Pagina 53

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 347
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 52
Linux From Scratch - Version 7.0
33
The temporary libraries are cross-compiled. Because a cross-compiler by its nature cannot rely on anything from
its host system, this method removes potential contamination of the target system by lessening the chance of
headers or libraries from the host being incorporated into the new tools. Cross-compilation also allows for the
possibility of building both 32-bit and 64-bit libraries on 64-bit capable hardware.
Careful manipulation of gcc's specs file tells the compiler which target dynamic linker will be used
Binutils is installed first because the configure runs of both GCC and Glibc perform various feature tests on the
assembler and linker to determine which software features to enable or disable. This is more important than one might
first realize. An incorrectly configured GCC or Glibc can result in a subtly broken toolchain, where the impact of
such breakage might not show up until near the end of the build of an entire distribution. A test suite failure will
usually highlight this error before too much additional work is performed.
Binutils installs its assembler and linker in two locations, /tools/bin and /tools/$LFS_TGT/bin. The tools
in one location are hard linked to the other. An important facet of the linker is its library search order. Detailed
information can be obtained from ld by passing it the --verbose flag. For example, an ld --verbose |
grep SEARCH will illustrate the current search paths and their order. It shows which files are linked by ld by
compiling a dummy program and passing the --verbose switch to the linker. For example, gcc dummy.c -
Wl,--verbose 2>&1 | grep succeeded will show all the files successfully opened during the linking.
The next package installed is GCC. An example of what can be seen during its run of configure is:
checking what assembler to use... /tools/i686-lfs-linux-gnu/bin/as
checking what linker to use... /tools/i686-lfs-linux-gnu/bin/ld
This is important for the reasons mentioned above. It also demonstrates that GCC's configure script does not search
the PATH directories to find which tools to use. However, during the actual operation of gcc itself, the same search
paths are not necessarily used. To find out which standard linker gcc will use, run: gcc -print-prog-name=ld.
Detailed information can be obtained from gcc by passing it the -v command line option while compiling a dummy
program. For example, gcc -v dummy.c will show detailed information about the preprocessor, compilation, and
assembly stages, including gcc's included search paths and their order.
The next package installed is Glibc. The most important considerations for building Glibc are the compiler, binary
tools, and kernel headers. The compiler is generally not an issue since Glibc will always use the compiler relating
to the --host parameter passed to its configure script, e.g. in our case, i686-lfs-linux-gnu-gcc. The binary tools
and kernel headers can be a bit more complicated. Therefore, take no risks and use the available configure switches
to enforce the correct selections. After the run of configure, check the contents of the config.make file in the
glibc-build directory for all important details. Note the use of CC="i686-lfs-gnu-gcc" to control which
binary tools are used and the use of the -nostdinc and -isystem flags to control the compiler's include search
path. These items highlight an important aspect of the Glibc package—it is very self-sufficient in terms of its build
machinery and generally does not rely on toolchain defaults.
After the Glibc installation, change gcc's specs file to point to the new dynamic linker in /tools/lib. This last
step is vital in ensuring that searching and linking take place only within the /tools prefix. A hard-wired path to a
dynamic linker is embedded into every Executable and Link Format (ELF)-shared executable. This can be inspected
by running: readelf -l <name of binary> | grep interpreter. Amending gcc's specs file ensures
that every program compiled from here through the end of this chapter will use the new dynamic linker in /tools/
lib.
For the second pass of GCC, its sources also need to be modified to tell GCC to use the new dynamic linker. Failure
to do so will result in the GCC programs themselves having the name of the dynamic linker from the host system's /
lib directory embedded into them, which would defeat the goal of getting away from the host.
Vista de pagina 52
1 2 ... 48 49 50 51 52 53 54 55 56 57 58 ... 346 347

Comentarios a estos manuales

Sin comentarios