Page suivante Page précédente Table des matières
3. Compilation des programmes
3.1 Programmes ordinaires
Pour compiler un programme en ELF, utilisez
gcccomme toujours. Pour compiler en a.out, utilisezgcc -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, worldLe 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 toujoursa.out.
3.2 Compilation des bibliothèques
Pour compiler
libfoo.soen 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_PATHCela 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/libpar exemple, et recréer les liens appropriés. Notez que le lienlibfoo.sodevrait pointer verslibfoo.so.1, ainsi n'est-il pas nécessaire de le mettre à jour à chaque changement du numéro mineur de version. Le lien delibfoo.so.1verslibfoo.so.1.0est gardé à jour parldconfigque 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-linuxaoutquand vous appellerez gcc, et-m i386linuxquand (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