Pour compiler un programme en ELF, utilisez gcc
comme toujours. Pour compiler en a.out, utilisez gcc -b i486-linuxaout
.
$ cat >hello.c
main() { printf("hello, world\n"); }
^D
$ gcc -o hello hello.c
$ file hello
hello: ELF 32-bit LSB executable i386 (386 and up) Version 1
$ ./hello
hello, world
Le moment est peut-être venu de répondre à la question "si l'option par défaut des compilateurs a.out est de produire un programme appelé a.out
, quel nom un compilateur ELF donne-t-il en sortie?''. La réponse est toujours a.out
.
Pour compiler libfoo.so
en une bibliothèque partagée, les étapes fondamentales sont du genre:
$ gcc -fPIC -c *.c
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
$ ln -s libfoo.so.1.0 libfoo.so.1
$ ln -s libfoo.so.1 libfoo.so
$ export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
Cela générera une bibliothèque partagée appelée libfoo.so.1.0
, et les liens appropriés pour que ld (libfoo.so
) et l'éditeur dynamique de liens (libfoo.so.1
) la trouvent. Comme test, ajoutons le répertoire courant à LD_LIBRARY_PATH
.
Quand vous êtes satisfaits du fonctionnement de la bibliothèque, vous pourrez la déplacer vers /usr/local/lib
par exemple, et recréer les liens appropriés.
Notez que le lien libfoo.so
devrait pointer vers libfoo.so.1
, ainsi n'est-il pas nécessaire de le mettre à jour à chaque changement du numéro mineur de version. Le lien de libfoo.so.1
vers libfoo.so.1.0
est gardé à jour par ldconfig
que la plupart des systèmes exécutent lors du processus d'amorçage.
$ su
# cp libfoo.so.1.0 /usr/local/lib
# /sbin/ldconfig
# ( cd /usr/local/lib ; ln -s libfoo.so.1 libfoo.so )
Vous pourriez avoir besoin de continuer à compiler des programmes dans l'ancien format a.out. Pour les programmes normaux, tout ce que vous avez à faire pour utiliser le compilateur a.out est de spécifier l'option -b i486-linuxaout
quand vous appellerez gcc, et -m i386linux
quand (si) vous appellerez ld. Si vous devez toujours compiler des bibliothèques partagées DLL a.out, vous avez toute ma sympathie. A ce que j'en sais, la réponse la plus courte est que cela ne marche pas. Envoyez-moi un mail si vous pensez différemment.