Depuis ses toutes premières versions, Linux supporte les binaires au format a.out. Le support pour les binaires au format ELF a été intégré dans le noyau et une distribution des bibliothèques partagées au format ELF a été faite. Les avantages du format ELF par rapport au format a.out sont nombreux :
dlopen()
, dlsym()
et
dlclose()
Les plus récentes versions des distributions sont basées sur le format ELF. Si votre machine est encore au format a.out, il est grand temps de réinstaller votre machine avec une distribution de Linux plus à jour
Les nouvelles versions du compilateur et des utilitaires génèrent
des exécutables au format ELF, par défaut. Il est possible de créer des
exécutables au format a.out en utilisant l'option -b i486-linuxaout
lors de l'appel de gcc.
Il est désormais assez facile de construire des bibliothèques
dynamiques. Les fichiers source doivent être compilés avec l'option
-fPIC
afin que le code généré puisse s'exécuter à n'importe
quelle adresse (les bibliothèques dynamiques sont chargées à des
adresses non prévisibles aussi le code doit être indépendant de son
adresse physique). L'option -shared
de gcc permet ensuite de
générer une bibliothèque dynamique.
Par exemple, pour générer une bibliothèque libtruc.so.1.0
, on
utilisera les commandes suivantes :
$ gcc -c -fPIC *.c $ gcc -shared -Wl,-soname,libtruc.so.1 -o libtruc.so.1.0 *.o
Quelques documents concernant ELF sont disponibles sur
ftp.lip6.fr
dans /pub/linux/ELF/doc
. Il s'agit de :
ELF.doc.tar.gz
: la spécification du format ELF,ELF.ps.gz
: un article, écrit par H.J. Lu, décrivant
l'implémentation du format ELF dans Linux,move_to_elf.gz
: une description de la transition entre les
formats a.out et ELF.Il est également possible d'en apprendre plus sur ELF par les URL suivants :
http://www.intac.com/~cully/elf.html
http://www.sjc.ox.ac.uk/users/barlow/linux-gcc.html