6.16. Binutils-2.31.1

Le paquet Binutils contient un éditeur de liens, un assembleur et d'autres outils pour gérer des fichiers objets.

Temps de construction approximatif: 6.6 SBU
Espace disque requis: 4.9 Go

6.16.1. Installation de Binutils

Vérifiez que les pseudo-terminaux (PTY) fonctionnent correctement dans l'environnement en effectuant un simple test :

expect -c "spawn ls"

Cette commande devrait afficher ce qui suit :

spawn ls

Si, à la place, la sortie affiche le message ci-dessous, c'est que l'environnement n'est pas paramétré pour la bonne opération PTY. Vous devez résoudre ce problème avant de lancer les suites de test de Binutils et de GCC :

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

La documentation de Binutils recommande de construire Binutils dans un répertoire de construction dédié :

mkdir -v build
cd       build

Préparez la compilation de Binutils :

../configure --prefix=/usr       \
             --enable-gold       \
             --enable-ld=default \
             --enable-plugins    \
             --enable-shared     \
             --disable-werror    \
             --enable-64-bit-bfd \
             --with-system-zlib

Voici la signification des options de configure :

--enable-gold

Construit l'éditeur de liens gold et l'installe en tant que ld.gold (à coté de l'éditeur de liens par défaut).

--enable-ld=default

Construit l'éditeur de liens bdf original et l'installe à coté de ld (l'éditeur par défaut) et ld.bfd

--enable-plugins

Active le support des greffons pour l'éditeur de lien.

--enable-64-bit-bfd

Active le support 64-bits (sur les systèmes avec une taille de mot plus petite). Elle n'est pas forcément requise sur les systèmes 64 bits, mais elle ne fait pas de mal.

--with-system-zlib

Utilise la version installée de la bibliothèque zlib plutôt que de construire la version incluse.

Compilez le paquet :

make tooldir=/usr

Voici la signification des options de configure :

tooldir=/usr

Normalement, le répertoire tooldir (où seront placés les exécutables) est configuré avec $(exec_prefix)/$(target_alias). Par exemple, les machines x86_64 l'étendront en /usr/x86_64-unknown-linux-gnu. Comme il s'agit d'un système personnalisé, nous n'avons pas besoin d'un répertoire spécifique à notre cible dans /usr. $(exec_prefix)/$(target_alias) serait utilisée si le système avait pour but une cross-compilation (par exemple, compiler un paquet sur une machine Intel qui génère du code pouvant être exécuté sur des machines PowerPC).

[Important]

Important

La suite de tests de Binutils dans cette section est considérée comme critique. Ne la sautez sous aucun prétexte.

Testez les résultats :

make -k check

Un test, debug_msg.sh est connu pour échouer.

Installez le paquet :

make tooldir=/usr install

6.16.2. Contenu de Binutils

Programmes installés: addr2line, ar, as, c++filt, elfedit, gprof, ld, ld.bfd, ld.gold, nm, objcopy, objdump, ranlib, readelf, size, strings et strip
Bibliothèques installées: libbfd.{a,so} et libopcodes.{a,so}
Répertoire installé: /usr/lib/ldscripts

Descriptions courtes

addr2line

Traduit les adresses de programme en noms de fichier et numéros de ligne ; suivant une adresse et le nom d'un exécutable, il utilise les informations de débogage disponibles dans l'exécutable pour déterminer le fichier source et le numéro de ligne associé à cette adresse

ar

Crée, modifie et extrait à partir d'archives

as

Un assembleur qui assemble la sortie de gcc en un fichier objet

c++filt

Utilisé par l'éditeur de liens pour récupérer les symboles C++ et Java, et pour empêcher les fonctions surchargées d'arrêter brutalement le programme

elfedit

Met à jour l'en-tête ELF des fichiers ELF

gprof

Affiche les données de profilage d'appels dans un graphe

ld

Un éditeur de liens combinant un certain nombre d'objets et de fichiers archives en un seul fichier, en déplaçant leur données et en regroupant les références de symboles

ld.gold

Une version réduite de ld qui supporte seulement le format de fichier elf.

ld.bfd

Lien dur vers ld

nm

Liste les symboles disponibles dans un fichier objet

objcopy

Traduit un type de fichier objet en un autre

objdump

Affiche des informations sur le fichier objet donné, les options contrôlant les informations à afficher ; l'information affichée est surtout utile aux programmeurs qui travaillent sur les outils de compilation

ranlib

Génère un index du contenu d'une archive et le stocke dans l'archive ; l'index liste tous les symboles définis par les membres de l'archive qui sont des fichiers objet déplaçables

readelf

Affiche des informations sur les binaires du type ELF

size

Liste les tailles des sections et la taille totale pour les fichiers objets donnés

strings

Affiche, pour chaque fichier donné, la séquence de caractères affichables qui sont d'au moins la taille spécifiée (par défaut, 4) ; pour les fichiers objets, il affiche, par défaut, seulement les chaînes des sections d'initialisation et de chargement alors que pour les autres types de fichiers, il parcourt le fichier entier

strip

Supprime les symboles des fichiers objets

libbfd

Bibliothèque des descripteurs de fichiers binaires

libopcodes

Une bibliothèque de gestion des opcodes—la « version lisible » des instructions du processeur ; elle est utilisée pour construire des outils comme objdump.