source: chapter05/adjusting.xml@ 5aa74f2

Last change on this file since 5aa74f2 was 5aa74f2, checked in by Manuel Canales Esparcia <manuel@…>, 18 years ago

Ported r7279 from trunk to alphabetical.

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

  • Property mode set to 100644
File size: 6.8 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
3 "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-tools-adjusting">
9 <?dbhtml filename="adjusting.html"?>
10
11 <title>Ajustar las herramientas</title>
12
13 <para>Ahora que se han instalado las librerías de C temporales, todas las
14 herramientas que compilemos en el resto de este capítulo deberían enlazarse
15 contra ellas. Para conseguirlo, deben ajustarse el enlazador y el fichero
16 specs del compilador.</para>
17
18 <para>El enlazador, que se ajustó al final del primer paso de Binutils,
19 se instala ejecutando el siguiente comando desde el directorio
20 <filename class="directory">binutils-build</filename>:</para>
21
22<screen><userinput>make -C ld install</userinput></screen>
23
24 <para>Desde ahora todo se enlazará solamente contra las librerías que hay en
25 <filename class="directory">/tools/lib</filename>.</para>
26
27 <note>
28 <para>Si por alguna razón olvidaste el aviso sobre conservar los directorios
29 de las fuentes y de construcción del primer paso de Binutils, ignora el
30 comando anterior. El resultado es la pequeña pega de que los siguientes
31 programas de pruebas se enlazarán contra las librerías del anfitrión. Esto
32 no es lo ideal, pero no es un gran problema. La situación se corregirá
33 cuando instalemos un poco más adelante la segunda fase de Binutils.</para>
34 </note>
35
36 <para>Ahora que se ha instalado el enlazador ajustado, debes eliminar los
37 directorios de las fuentes y de construcción de Binutils.</para>
38
39 <para>Lo siguiente esapuntar GCC al nuevo enlazador dinámico. Esto se hace
40 volcando el fichero <quote>specs</quote>de GCC a un lugar en el que GCC lo
41 busque por defecto. Entonces una simple sustitución <command>sed</command>
42 altera el enlazdor inámic que GCC usará:</para>
43
44<!-- Ampersands are needed to allow cut and paste -->
45<screen><userinput>SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &amp;&amp;
46gcc -dumpspecs > $SPECFILE &amp;&amp;
47sed 's@^/lib/ld-linux.so.2@/tools&amp;@g' $SPECFILE &gt; tempspecfile &amp;&amp;
48mv -vf tempspecfile $SPECFILE &amp;&amp;
49unset SPECFILE</userinput></screen>
50
51 <para><phrase condition="html">Recomendamos que copies y pegues lo anterior
52 para asegurar que no hay errores.</phrase> Alternativamente, puedes editar el
53 fichero specs a mano si quieres. Esto se hace reemplazando cada aparición de
54 <quote>/lib/ld-linux.so.2</quote> con <quote>/tools/lib/ld-linux.so.2</quote>.</para>
55
56 <para>Asegúrate de revisar visualmente el fichero specs para
57 verificar que se han hecho los cambios deseados.</para>
58
59 <important>
60 <para>Si estás trabajando sobre una plataforma en la que el nombre del
61 enlazador dinámico no es <filename class="libraryfile">ld-linux.so.2</filename>,
62 en el anterior comando debes sustituir <filename>ld-linux.so.2</filename> con
63 el nombre del enlazador dinámico de tu plataforma. En caso necesario consulta
64 la <xref linkend="ch-tools-toolchaintechnotes"/>.</para>
65 </important>
66
67 <para>Durante el proceso de construcción, GCC ejecuta un guión
68 (<command>fixincludes</command>) que explora el sistema buscando ficheros de
69 cabecera que puedan necesitar ser corregidos (que pueden contener errores de
70 sintaxis, por ejemplo), e instala las versiones corregidas en un directorio
71 privado. Existe la posibilidad de que, como resultado de este proceso, algunos
72 ficheros de cabecera del sistema anfitrión se hayan colado dentro de dicho
73 directorio privado de cabeceras de GCC. Como el resto de este capítulo sólo
74 necesita las cabeceras de GCC y Glibc, que ya han sido instaladas, cualquier
75 cabecera <quote>fijada</quote> puede borrarse sin problemas. Esto ayuda a
76 evitar que cualquier cabecera del anfitrión contamine el entorno de
77 construcción. Ejecuta los siguientes comandos para eliminr dichos ficheros de
78 cabecera (puede que encuentres más facil copiar y pegar estos comandos en vez
79 de teclearlos, debido a su longitud):</para>
80
81<!-- && used to ease copy and pasting -->
82<screen><userinput>GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &amp;&amp;
83find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &amp;&amp;
84rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &amp;&amp;
85unset GCC_INCLUDEDIR</userinput></screen>
86
87 <caution>
88 <para>En este punto es obligatorio parar y asegurarse de que las operaciones
89 básicas (compilación y enlazado) de las nuevas herramientas funcionan como
90 se espera. Para esto vamos a hacer una simple comprobación:</para>
91
92<screen><userinput>echo 'main(){}' &gt; dummy.c
93cc dummy.c
94readelf -l a.out | grep ': /tools'</userinput></screen>
95
96 <para>Si todo funciona correctamente, no debe haber errores y la salida del
97 último comando debe ser:</para>
98
99<screen><computeroutput>[Requesting program interpreter:
100 /tools/lib/ld-linux.so.2]
101
102[Intérprete de programa solicitado:
103 /tools/lib/ld-linux.so.2]</computeroutput></screen>
104
105 <para>Confirma que <filename class="directory">/tools/lib</filename>
106 aparezca como el prefijo de tu enlazador dinámico.</para>
107
108 <para>Si no recibes una salida como la mostrada arriba, o no hay salida
109 alguna, algo está seriamente mal. Investiga y revisa tus pasos para
110 encontrar el problema y corregirlo. El problema debe resolverse antes de
111 continuar. Primero, repite la comprobación de sanidad usando
112 <command>gcc</command> en vez de <command>cc</command>. Si esto funciona
113 significa que falta el enlace simbólico <filename
114 class="symlink">/tools/bin/cc</filename>. Vuelve a la <xref
115 linkend="ch-tools-gcc-pass1"/> e instala el enlace simbólico. Seguidamente,
116 asegúrate de que tu <envar>PATH</envar> es correcto. Puedes comprobarlo
117 ejecutando <command>echo $PATH</command> y verificando que <filename
118 class="directory">/tools/bin</filename> está en cabeza de la lista. Si
119 el <envar>PATH</envar> está mal puede significar que no has ingresado
120 como usuario <systemitem class="username">lfs</systemitem> o que algo
121 salió mal en la <xref linkend="ch-tools-settingenviron"/>. Otra opción es
122 que algo pudo ir mal en el anterior arreglo del fichero specs. En este caso,
123 repite el arreglo del fichero<phrase condition="html"> asegurándote de
124 copiar y pegar los comandos como se recomendó</phrase>.</para>
125
126 <para>Cuando todo esté bien, borra los ficheros de prueba:</para>
127
128<screen><userinput>rm -v dummy.c a.out</userinput></screen>
129
130 <para>La construcción de TCL en la siguiente sección servirá como comprobación
131 adicional de que las herramientas se han construido correctamente. Si la
132 construcción de TCL falla, esto es una indicación de que algo fué mal durante
133 la instalación de Binutils, GCC o Glibc, pero no con el propio TCL.</para>
134 </caution>
135
136</sect1>
Note: See TracBrowser for help on using the repository browser.