Binutils-2.14 - Fase 1

El paquete Binutils contiene un enlazador, un ensamblador y otras utilidades para trabajar con ficheros de objetos.

Tiempo estimado de construcción:  1.0 SBU
Espacio requerido en disco:       170 MB

La instalación de Binutils depende de: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.

Instalación de Binutils

Es importante que Binutils sea el primer paquete que compiles, pues tanto Glibc como GCC llevan a cabo varias comprobaciones sobre el enlazador y el ensamblador disponibles para determinar qué características activar.

Se sabe que este paquete se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Por tanto, si tienes definida cualquier variable de entorno que sobreescriba las optimizaciones por defecto, como CFLAGS y CXXFLAGS, te recomendamos que las desactives cuando construyas Binutils.

La documentación de Binutils recomienda construir Binutils en un directorio aparte, fuera del directorio de las fuentes:

mkdir ../binutils-build
cd ../binutils-build
[Nota]

Nota

Si quieres que los valores de los SBUs mostrados en el resto del libro sean de utilidad, tendrás que medir el tiempo que se tarda en construir este paquete, desde la compilacación hasta la instalación. Para ello, envuelve los comandos dentro de un comando time de esta forma: time { ./configure ... && ... && ... && make install; }.

A continuación, prepara Binutils para su compilación:

../binutils-2.14/configure --prefix=/tools --disable-nls

Significado de las opciones de configure:

  • --prefix=/tools: Esto le indica al guión configure que los programas de Binutils se instalarán en el directorio /tools.

  • --disable-nls: Esta opción desactiva la internacionalización (también conocida como i18n). No es necesaria para nuestros programas estáticos y nls suele causar problemas con el enlazado estático.

Continúa compilando el paquete:

make configure-host
make LDFLAGS="-all-static"

Significado de los parámetros de make:

  • configure-host: Esto fuerza que todos los subdirectorios se configuren inmediatamente. Una construcción enlazada estáticamente fallará sin esto. Por tanto usamos esta opción para evitar el problema.

  • LDFLAGS="-all-static": Esto le indica al enlazador que todos los programas de Binutils deben enlazarse estáticamente. Sin embargo, y estrictamente hablando, "-all-static" se le pasa al programa libtool, el cual luego le pasa "-static" al enlazador.

La compilación se ha completado. Normalmente deberíamos ejecutar ahora el banco de pruebas, en esta temprana fase el entorno de trabajo para los bancos de pruebas (Tcl, Expect y DejaGnu) todavía no está en su sitio. Y de todas formas no tendría sentido ejecutar las pruebas, pues los programas de esta primera fase pronto serán sustituidos por los de la segunda.

E instala el paquete:

make install

Ahora prepara al enlazador para la posterior fase de “Ajuste”:

make -C ld clean
make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib

Significado de las opciones de make:

  • -C ld clean: Esto le indica al programa make que elimine todos los ficheros compilados que haya en el subdirectorio ld.

  • -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib: Esta opción vuelve a construir todo dentro del subdirectorio ld. Especificar la variable LIB_PATH en la línea de comandos nos permite obviar su valor por defecto y apuntar a nuestro directorio de herramientas temporales. El valor de esta variable especifica la ruta de búsqueda de librerías por defecto del enlazador. Verás cómo estos preparativos se utilizan más tarde en este capítulo.

[Aviso]

Aviso

No borres todavía los directorios de fuentes y de construcción de Binutils. Los necesitarás un poco más adelante en este capítulo en el estado en que se encuentran ahora.

Los detalles sobre este paquete se encuentran en “Contenido de Binutils”.