Binutils-2.14

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

Tiempo estimado de construcción:  1.4 SBU
Espacio requerido en disco:       167 MB

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

Instalación de Binutils

Ahora es el momento apropiado para verificar que tus pseudo-terminales (PTYs) funcionan adecuadamente dentro del entorno chroot. Comprobaremos de nuevo rápidamente que todo está correcto realizando una simple prueba:

expect -c "spawn ls"

Si recibes el mensaje:

The system has no more ptys.  Ask your system administrator to create more.

El sistema no tiene más ptys. Pídele al administrador del sistema que cree más.

Tu entorno chroot no está configurado para la correcta operación de PTY. En este caso no hay razón para ejecutar los bancos de pruebas de Binutils y GCC hasta que seas capaz de resolver este asunto. Regresa a “Montar los sistemas de ficheros proc y devpts” y a la sección Make_devices y lleva a cabo los pasos recomendados para corregir el problema.

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 construirlo fuera del directorio de las fuentes, en un directorio de construcción dedicado:

mkdir ../binutils-build
cd ../binutils-build

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

../binutils-2.14/configure --prefix=/usr --enable-shared

Compila el paquete:

make tooldir=/usr

Normalmente, tooldir (el directorio donde se instalarán los ejecutables) se establece como $(exec_prefix)/$(target_alias), lo que se convierte en, por ejemplo, /usr/i686-pc-linux-gnu. Como sólo construimos programas para nuestro propio sistema, no necesitamos en /usr este directorio específico de un objetivo. Esa configuración se utilizaría si el sistema fuese usado para compilación cruzada (por ejemplo, para compilar un paquete en una máquina Intel, pero generando código que se ejecutará en máquinas PowerPC).

[Importante]

Importante

El banco de pruebas para Binutils de este capítulo se considera crítico. No te lo saltes bajo ninguna circunstancia.

Comprueba los resultados:

make check

Las notas sobre el banco de pruebas que hay en “Binutils-2.14 - Fase 2” son aún más apropiadas aquí. Asegúrate de consultarlas en caso de que tengas alguna duda.

Instala el paquete:

make tooldir=/usr install

Instala el fichero de cabecera de libiberty, pues lo necesitan algunos paquetes:

cp ../binutils-2.14/include/libiberty.h /usr/include

Contenido de Binutils

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]

Descripciones cortas

addr2line traslada direcciones de programas a nombres de ficheros y números de líneas. Dándole una dirección y un ejecutable, usa la información de depuración del ejecutable para averiguar qué fichero y número de línea está asociado con dicha dirección.

arcrea, modifica y extrae desde archivos. Un archivo es un fichero que almacena una colección de otros ficheros en una estructura que hace posible obtener el original de cada fichero individual (llamados miembros del archivo).

as es un ensamblador. Ensambla la salida de gcc dentro de ficheros objeto.

c++flit es usado por el enlazador para decodificar (demangling) símbolos de C++ y Java, guardando las funciones sobrecargadas para su clasificación.

gprof muestra los datos del perfil del gráfico de llamada.

ld es un enlazador. Combina un número de ficheros de objetos y de archivos en un único fichero, reubicando sus datos y estableciendo las referencias a los símbolos.

nm lista los símbolos que aparecen en un fichero objeto dado.

objcopy se utiliza para traducir un tipo de ficheros objeto a otro.

objdump muestra información sobre el fichero objeto indicado, con opciones para controlar la información a mostrar. La información mostrada es útil fundamentalmente para los programadores que trabajan sobre las herramientas de compilación.

ranlib genera un índice de los contenidos de un archivo, y lo coloca en el archivo. El índice lista cada símbolo definido por los miembros del archivo que son ficheros objeto reubicables.

readelf muestra información sobre binarios de tipo elf.

size lista los tamaños de las secciones (y el tamaño total) para cada uno de los ficheros objeto indicados.

strings muestra, para cada fichero indicado, las cadenas de caracteres imprimibles de al menos la longitud especificada (4 por defecto). Para los ficheros objeto por defecto sólo muestra las cadenas procedentes de las secciones de inicialización y carga. Para otros tipos de ficheros explora el fichero al completo.

strip elimina símbolos de ficheros objeto.

libiberty contiene rutinas usadas por varios programas GNU, incluidos getopt, obstack, strerror, strtol y strtoul.

libbfd es la librería del Descriptor de Fichero Binario.

libopcodes es una librería para manejar mnemónicos. Se usa para construir utilidades como objdump. Los mnemónicos son las versiones en “texto legible” de las instrucciones del procesador.