Previous Next Table of Contents

3. Compilation des programmes

3.1 Programmes ordinaires

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.

3.2 Compilation des bibliothèques

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 )

3.3 Compiler en a.out

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.


Previous Next Table of Contents