Estimación del tiempo de construcción: 6 minutos Estimación del espacio de disco requerido: 96 MB |
Se sabe que este programa se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Es mejor dejar a Binutils tal como está, así que te recomendamos borrar CFLAGS, CXXFLAGS y otras variables/parámetros como éstos que podrían cambiar la optimización con la que viene por defecto.
Instala Binutils ejecutando los siguientes comandos:
mkdir ../binutils-build && cd ../binutils-build && ../binutils-2.12/configure --prefix=$LFS/usr --disable-nls && make LDFLAGS=-all-static tooldir=$LFS/usr && make tooldir=$LFS/usr install |
mkdir ../binutils-build: Las instrucciones de instalación de Binutils recomiendan crear un directorio de construcción separado en lugar de compilar el paquete dentro del árbol de directorios de código fuente. Por ello, creamos un directorio binutils-build y trabajamos allí.
--disable-nls: Esta opción desactiva la internacionalización (también conocida como i18n). No la necesitamos para los programas estáticos, y nls, a menudo, causa problemas en el enlazado estático.
LDFLAGS=-all-static: Asignar a la variable LDFLAGS el valor -all-static provoca que binutils se enlace estáticamente.
tooldir=$LFS/usr: Normalmente, el directorio de herramientas (el directorio donde se instalarán los ejecutables de binutils) tiene el valor $(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 $LFS/usr este directorio específico de cada objetivo. Esa configuración se usaría si el sistema fuese usado para compilación cruzada (por ejemplo, compilando un paquete en una máquina Intel pero generando código que se ejecutará en máquinas Apple PowerPC).
addr2line, ar, as, c++filt, gasp, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings y strip
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.
El programa ar crea, 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 está pensado, principalmente, para ensamblar la salida del compilador GNU gcc para ser usada por el enlazador ld.
El lenguaje C++ proporciona sobrecarga de funciones, lo que significa que es posible escribir varias funciones con el mismo nombre (suponiendo que cada una tome parámetros de diferente tipo). Todos los nombres de funciones C++ son codificadas dentro de una etiqueta de bajo nivel del ensamblador (este proceso es conocido como "mangling"). El programa c++flit hace lo contrario: decodifica (demangling) nombres de bajo nivel en nombres de nivel de usuario para que el enlazador pueda evitar conflictos en estas funciones sobrecargadas.
ld combina un número de objetos y ficheros de archivo, reubica sus datos y establece las referencias a los símbolos. Frecuentemente, el último paso de la compilación de un nuevo programa es hacer una llamada a ld.
La utilidad objcopy copia el contenido de un fichero objeto en otro. objcopy usa la librería BFD de GNU para leer y escribir los ficheros objeto. Puede escribir el fichero objeto destino en un formato diferente al del fichero objeto fuente .
objdump muestra información sobre uno o más ficheros objeto. Mediante opciones se puede indicar la información a mostrar. Esta información es útil fundamentalmente para los programadores que trabajan en herramientas de compilación (al contrario de los programadores que sólo quieren que sus programas compilen y funcionen).
ranlib genera un índice de los contenidos de un archivo, y lo coloca en el archivo. El índice lista cada símbolo definido por un miembro de un archivo que es un fichero objeto reubicable.
size lista los tamaños de las secciones -y el tamaño total- para cada uno de los ficheros objeto en su lista de argumentos. Por defecto, se genera una línea de salida por cada fichero objeto o cada módulo de un archivo.
Para cada fichero dado, strings muestra las cadenas de caracteres imprimibles de al menos 4 caracteres (o el número especificado en las opciones del programa) seguidas por un carácter no imprimible. Por defecto, sólo muestra las cadenas procedentes de las secciones de inicialización y carga de los ficheros objeto; para otros tipos de ficheros muestra todas las cadenas de los mismos.
strings es útil, principalmente, para determinar el contenido de ficheros que no son de texto.
strip elimina todos los símbolos o sólo los especificados de los ficheros objeto. La lista de ficheros objeto puede incluir archivos. Se debe indicar, por lo menos, un fichero objeto. strip modifica los ficheros mencionados en sus argumentos, en vez de escribir copias modificadas con otro nombre.
Para instalar Binutils-2.11.2 se necesita lo siguiente:
autoconf: autoconf, autoheader
automake: aclocal, automake
bash: sh
binutils: ar, as, ld, nm, ranlib, strip
diffutils: cmp
fileutils: chmod, cp, ln, ls, mkdir, mv, rm, rmdir, touch
flex: flex
gcc: cc, cc1, collect2, cpp0, gcc
glibc: ldconfig
grep: egrep, fgrep, grep
m4: m4
make: make
gawk: gawk
sed: sed
sh-utils: basename, echo, expr, hostname, sleep, true, uname
texinfo: install-info, makeinfo
textutils: cat, sort, tr, uniq