Tiempo estimado de construcción: 1.0 SBU Estimación del espacio necesario en disco: 194 MB |
Binutils es una colección de herramientas para el desarrollo de software que contiene un enlazador, un ensamblador y otras utilidades para trabajar con ficheros de objetos y archivos.
Programas instalados: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings y strip
Librerías instaladas: libiberty.a, libbfd.[a,so] y libopcodes.[a,so]
Binutils depende de: Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.
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.
Nota: Aunque Binutils es un paquete importante de las herramientas principales, no vamos a ejecutar su banco de pruebas en esta fase. Primero, porque el entorno de trabajo del banco de pruebas aún no está en su sitio y segundo, porque los programas de esta primera fase pronto serán sobreescritos por aquellos instalados en la segunda fase.
Se sabe que este programa 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 pueda sobreescribir las optimizaciones por defecto, como CFLAGS y CXXFLAGS, te recomendamos que las desactives o modifiques antes de construir 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: 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. Para ello, haz lo siguiente: 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 primero al programa libtool, el cual luego le pasa "-static" al enlazador.
Instala el paquete:
make install |
Ahora prepara al enlazador para "bloquear" Glibc más tarde:
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 únicamente.
-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. Lo que preparas aquí lo utilizarás más tarde en este capítulo.
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. |