Binutils-2.14

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

Temps de construction approximatif :  1,4 SBU
Espace disque requis :                167 Mo

L'installation de Binutils dépend de Bash, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo.

Installation de Binutils

C'est maintenant le bon moment pour vérifier que vos pseudo-terminaux (PTY) fonctionnent correctement dans l'environnement chroot. Nous allons de nouveau vérifier rapidement que tout est bien configuré en réalisant un test simple :

expect -c "spawn ls"

Si vous recevez le message :

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

c'est que votre environnement chroot n'est pas bien configuré pour les PTY. Dans ce cas, il n'y a aucune raison de lancer les suites de tests pour Binutils et GCC jusqu'à ce que vous soyez capable de résoudre ces problèmes. Merci de vous référer à la section intitulée « Monter les systèmes de fichiers proc et devpts » et à Make_devices et de réaliser les étapes recommandées pour corriger le problème.

Ce paquet est connu pour mal se comporter si vous changez les options d'optimisation par défaut (en incluant les options -march et -mcpu). Donc, si vous avez défini des variables d'environnement qui surchargent les optimisations pas défaut, telles que CFLAGS et CXXFLAGS, nous vous recommandons de supprimer ces initialisations lors de la construction de Binutils.

La documentation de Binutils recommande de construire Binutils à l'extérieur du répertoire des sources dans un répertoire dédié :

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

Maintenant, préparez la compilation de Binutils :

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

Compilez le paquet :

make tooldir=/usr

Normalement, le répertoire tooldir (où finiront les exécutables) est configuré avec $(exec_prefix)/$(target_alias), ce qui s'étendra en, par exemple, /usr/i686-pc-linux-gnu. Comme nous ne construisons que pour notre propre système, nous n'avons pas besoin d'un répertoire spécifique à notre cible dans /usr. Cette configuration 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. Notre conseil est de ne pas la laisser passer, quelqu'en soit la raison.

Testez les résultats :

make check

Les notes de la suite de tests (la section intitulée « Binutils-2.14 - Passe 2 ») sont toujours appropriées ici. Assurez-vous de vous y référer si vous avez un doute.

Installez le paquet :

make tooldir=/usr install

Installez le fichier d'en-tête libiberty, requis par certains paquets:

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

Contenu de Binutils

Programmes installés : addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings et strip

Bibliothèques installées : libiberty.a, libbfd.[a,so] et libopcodes.[a,so]

Courtes descriptions

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éboguage disponibles dans l'exécutable pour trouver le fichier source et le numéro de ligne associé à cette adresse.

ar crée, modifie et extrait des archives. Une archive est un simple fichier contenant une collection d'autres fichiers dans une structure qui rend possible la récupération des fichiers originaux individuels (aussi appelés membres de l'archive).

as est un assembleur. Il assemble la sortie de gcc en des fichiers objet.

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

gprof affiche les données de profilage d'appels dans un graphe.

ld est un éditeur de liens. Il combine un certain nombre d'objects et de fichiers archives dans un seul fichier, en déplaçant leur données et en regroupant les références de symboles.

nm liste les symboles disponibles dans un fichier objet.

objcopy est utilisé pour traduire un type de fichier objet en un autre type.

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 de type elf.

size liste les tailles de section et le total 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. Pour les autres types de fichiers, il parcourt le fichier entier.

strip supprime les symboles des fichiers objets.

libiberty contient des routines utilisées par différents programmes GNU, ceci incluant getopt, obstack, strerror, strtol et strtoul.

libbfd est la bibliothèque des descripteurs de fichiers binaires (Binary File Descriptor).

libopcodes est une bibliothèque de gestion des opcodes. Elle est utilisée pour construire des outils comme objdump. Les opcodes sont le « texte lisible » des instructions du processeur.