retour à la liste des howto linux Page suivante Page précédente Table des matières

370. Compilation des programmes

370.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.

370.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 )

370.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.


Page suivante Page précédente Table des matières