Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

Enlazadores Dinámicos - MoldInstalar Clang desde cero

Instalar Binutils desde cero




Instalar Binutils desde cero




Copyright

Copyright © José Luis Lara Carrascal  2014-2024   http://manualinux.es



Sumario

Introducción
Instalación
Optimizaciones
Enlaces



 
Introducción

En este manual trataremos la instalación de una versión especial del conjunto de herramientas de binarios de GNU, conocidas con el nombre de Binutils, que entre otra serie de cosas, proporcionan el enlazador dinámico GNU ld, y el ensamblador GNU as. Esta versión especial es requerida para poder compilar el plugin LLVM Gold, en el manual de instalación de Clang, requerido para poder disponer de la optimización LTO, en las compilaciones que realicemos con Clang. En el caso de GCC, el uso del enlazador dinámico ld.gold, mejora la optimización LTO, aplicada en el proceso de compilación.



Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado Binutils para la elaboración de este documento.

* GCC - (13.2.0)
* Gawk - (5.3.0)
* M4 - (1.4.19)
* Libtool - (2.4.7)
* Make - (4.4.1)
* Automake - (1.16.5)
* Autoconf - (2.72)
* Gettext - (0.22.4)
* Bison - (3.8.2)
* Flex - (2.6.4)
* Texinfo - (7.1)

Librerías de Desarrollo

* Libdebuginfod (Elfutils) - (0.190)
* Libzstd - (1.5.5)
* Zlib - (1.3.1)



Descarga

binutils-2.42.tar.xz

Optimizaciones

$ export {C,CXX}FLAGS='-O3 -march=znver3 -mtune=znver3'

Donde pone znver3 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Valores CPU
Genéricos
Intel
AMD

Optimizaciones adicionales

Optimizaciones adicionales
Graphite
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
IPA
$ export {C,CXX}FLAGS+=' -fipa-pta'

Parámetros adicionales

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc13/lib64"
Cada usuario tendrá que establecer la ruta de búsqueda de directorios, en función de la distribución que utilice.

Crear una ubicación temporal de GNU ld en /tmp/bin

La compilación del paquete produce errores con GNU gold. Si esta versión es la predefinida del sistema, crearemos un directorio temporal de ubicación de GNU ld y, posteriormente, lo añadiremos a nuestro PATH.

$ mkdir -p /tmp/bin
$ cp /usr/bin/ld.bfd /tmp/bin/ld
$ export PATH=/tmp/bin:$PATH

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar Jxvf binutils-2.42.tar.xz
$ mkdir binutils-2.42/build; cd binutils-2.42/build
$ ../configure --prefix=/usr --enable-shared --enable-threads --disable-werror \
--enable-lto --enable-gold=default --enable-plugins --with-system-zlib \
--enable-64-bit-bfd --libdir=/usr/lib64 --sysconfdir=/etc

Explicación de los comandos

mkdir binutils-2.42/build; cd binutils-2.42/build : Creamos un directorio de compilación, para no compilar directamente en el directorio de las fuentes y entramos en él.
--prefix=/usr : Instala Binutils en el directorio principal /usr.
--enable-shared : Activa la compilación de las librerías compartidas.
--enable-threads : Activa el soporte multihilo en el enlazador dinámico ld.gold

--disable-werror
: Evita que los avisos sean tratados como errores en el proceso de compilación.
--enable-lto : Activa el soporte de la optimización LTO.
--enable-gold=default : Activa la compilación del enlazador dinámico ld.gold, y lo establece como predefinido del sistema. En procesos de compilación en los que dé problemas el uso de éste, estableceremos la siguiente variable de entorno para utilizar el enlazador predefinido del paquete.

$ export LDFLAGS+=' -fuse-ld=bfd'

--enable-plugins : Activa el soporte de plugins.
--with-system-zlib : Compila el soporte de la versión de Zlib que tengamos en nuestro sistema, en lugar de la integración estática de la versión específica incluida en el paquete.

--enable-64-bit-bfd : Activa el soporte de la arquitectura de procesador de 64 bits en el enlazador dinámico.
--libdir=/usr/lib64 : Instala las librerías en /usr/lib64, en sistemas de 64 bits multiarquitectura. La ubicación y el nombre de este directorio, puede variar en función de la distribución que cada usuario use.

--sysconfdir=/etc : Instala los archivos de configuración relativos al programa en /etc, en lugar de /usr/etc.

Compilación

$ make tooldir=/usr

Parámetros de compilación opcionales

-j$(nproc): Establece el número de procesos de compilación en paralelo, en función del número de núcleos e hilos que tenga nuestro procesador, tomando como referencia la información mostrada por el sistema con el comando correspondiente. Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta opción.

Instalación como root

$ su
# make tooldir=/usr install
# ldconfig -v

Borrar las locales adicionales instaladas con la utilidad BleachBit

$ su -c "bleachbit -c system.localizations"

Estadísticas de Compilación e Instalación de Binutils

Estadísticas de Compilación e Instalación de Binutils
CPU AMD Ryzen 5 5500
MHz 3593.250 (BoostMax=4457.000)
RAM 32 GB
Sistema de archivos XFS
Versión del Kernel 6.7.2-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Planificador de CPU BORE
Versión de Glibc 2.38
Enlazador dinámico GNU ld (GNU Binutils 2.40)
Compilador GCC 13.2.0 + Ccache 4.9
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -ftree-loop-linear -floop-strip-mine -floop-block -fipa-pta
Parámetros de compilación -j12
Tiempo de compilación 1' 39"
Archivos instalados 194
Mostrar/Ocultar la lista de archivos instalados
Enlaces simbólicos creados 10
Mostrar/Ocultar la lista de enlaces simbólicos creados
Ocupación de espacio en disco 43,4 MB

Desinstalación como root

1) MODO TRADICIONAL

Este programa no tiene soporte para desinstalación con el comando 'make uninstall'. 

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

binutils-2.42-scripts.tar.gz

$ su
# tar zxvf binutils-2.42-scripts.tar.gz
# cd binutils-2.42-scripts
# ./Desinstalar_binutils-2.42

La desinstalación de Binutils conlleva la restauración del enlazador dinámico que existía antes en el sistema. Restauración que tenemos que realizar a través de los paquetes binarios proporcionados por la distribución, o en su lugar, desde la instalación desde código fuente de la versión anterior de este paquete, siguiendo los pasos descritos en este manual. Tener esto muy en cuenta a la hora de intentar desinstalar este paquete.

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf binutils-2.42-scripts.tar.gz
# cd binutils-2.42-scripts
# ./Respaldar_binutils-2.42

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_binutils-2.42



Enlaces


http://www.gnu.org/software/binutils >> La web de Binutils.


Foro Galería Blog


Actualizado el 30-01-2024

Instalar Binutils desde cero

Enlazadores Dinámicos - MoldInstalar Clang desde cero