Next Previous Contents

2. Compilation de programmes sous Linux

Par JC Pollman

Bon, vous êtes débutant sous linux et vous êtes prêts à vous salir les mains. La plupart d'entre nous, moi-même y compris, ne sommes pas des programmeurs, mais cela ne veut pas dire que nous ne pouvons pas nous réjouir du bénéfice des sources libres, voire contribuer à la cause. Cela veut dire aussi que nous sommes désavantagés si la compilation se passe mal. La compilation est habituellement très simple : on ne se préoccupe de rien et ce n'est certainement pas aussi difficile que la programmation, mais ce n'est pas un évènement 100% garanti. Ce qui suit est un guide de compilation pour débutant. Il a pour but d'apporter 90% des solutions pour les personnes débutant avec Linux.

Un jour ou l'autre, tout le monde télécharge un programme en code source et essaye de le compiler. Même si vous suivez de très près la RedHat ou la Debian, il vous arrivera de tomber sur un programme soit trop ancien, soit trop récent, pour en trouver une version précompilée binaire. La mauvaise nouvelle, c'est que le code ne se compilera pas toujours quoi que vous fassiez - rappelez vous, la plupart des programmes en sont, au mieux, au stade beta. La bonne nouvelle, c'est que le pourcentage de programmes qui se compilent sans problème a augmenté de façon significative ces cinq dernières années, et qu'il y a des choses que vous pouvez faire pour "corriger" le code qui ne se compilerait pas sans être un programmeur.

Après avoir téléchargé:vous avez quelque chose du genre tarball sur votre disque. D'avord vous devez le décompresser et extraire l'archive tar dans un répertoire. Par convention, la plupart des gens extraient le tar dans le répertoire : /usr/src. Cela permet de tout garder au même endroit pour pouvoir nettoyer après coup, aussi bien que de garder une trace de la version du programme que vous avez compilé. Vous devrez être root pour utiliser ce répertoire. Le programme tar de linux peut décompresser et extraire le fichier archive tar en même temps si le fichier a été compressé avec gzip. Si vous avez un fichier nommé : nomdefichier.tar.gz, vous pouvez changer de répertoire vers /usr/src et taper:

tar -xzvf /{chemin au fichier}/{nomdefichier.tar.gz} [Entrée]

et il sera décompressé et extrait. Voici une explication rapide des options :

    x - extrait le fichier
    z - décompresse le fichier
    v - verbeux - ainsi vous pouvez voir ce qui se passe.
    f - ce qui suit est le fichier que vous voulez extraire

Si vous utilisez Netscape pour télécharger le fichier, vous pourriez avoir une erreur. Quelques fois Netscape décompressera le fichier pour vous. Ainsi si vous essayez de l'extraire comme indiqué plus haut vous pourrez voir :

    gzip: stdin: not in gzip format [stdin : ce n'est pas un format gzip]
    tar: Child returned status 1 [ Le fils a retourné un code d'état 1]
    tar: Error exit delayed from previous errors [Erreur sortie due à des erreurs précédentes]

Essayez la même commande, mais laissez de côté le z. Ainsi cela ressemble à:

tar -xvf /{chemin au fichier}/{nomdefichier.tar} [Entrée]

Au lieu de gzip, beaucoup de fichiers utilisent bzip2 pour la compression, ainsi votre fichier ressemblera à: le-programme.tar.bz2. L'option z pour tar ne fonctionnera plus. La manière la plus simple d'extraire le fichier est de taper : bunzip2 le-programme.tar.bz2. Cela vous donnera le fichier : le-programme.tar, dont l'extraction se fait par:

tar -xvf /{chemin au fichier}/{nomdefichier.tar} [Entrée]

Après l'extraction: allez dans le répertoire créé après l'extraction du programme par tar. Regardez les fichiers dans ce répertoire : ls. Vous devez lire les fichiers README et INSTALL. Ne comptez pas avoir la moindre aide de quiconque si vous ne lisez pas ces fichiers. Il y a une raison pour que RTFM soit l'une des expressions les plus courante sur le net. Les fichiers README et INSTALL devraient vous indiquer comment compiler et installer le programme.

Pour compiler, vous utilisez la commande "make". Pour que "make" puisse commencer la compilation, il doit y avoir un fichier appelé: Makefile (vous pourriez utiliser les options de "make" sur la ligne de commande, mais cela est au delà de l'objectif de cet article.) Il y a trois méthodes courantes pour commencer à compiler: la simple, Imake et configure.

Compilation simple: si vous voyez un fichier appelé Makefile - pas de fichier Imake ou configure, vous allez utiliser cette méthode pour compiler. Cette méthode de compilation a le plus grand nombre de problèmes parce que rien n'est configuré pour votre ordinateur. Souvent les fichiers README et INSTALL vous indiquerons d'éditer quelques fichiers pour pouvoir compiler. Habituellement vous avez alors à taper:

make [Entrée] make install [Entrée]

et tout si va bien, vous pouvez maintenant exécuter le programme.

Imake: si vous listez par ls le répertoire et qu'il y a un fichier Imake et pas de Makefile, utilisez cette méthode. C'est une ancienne méthode pour préparer la compilation. Pratiquement, il faut taper:

xmkmf [Entrée] make [Entrée] make install [Entrée]

Configure: Utilisez cette méthode de compilation s'il y a un fichier nommé configure dans le répertoire. C'est la méthode la plus simple pour compiler et probablement la plus sûre pour compiler correctement. Pour l'essentiel, cela vérifie votre système entièrement pour toutes les librairies possibles et les fichiers concernés pour s'assurer que vous pouvez compiler le programme, puis crée le Makefile avec les informations correctes. Pour compiler, tapez:

./configure [Entrée] make [Entrée] make install [Entrée]

Notez le ./ devant la première commande. Lorsque vous tapez une commande, votre shell recherche les fichiers dans votre path. Il ne commence pas par regarder dans votre répertoire courant, donc si ./ (qui signifie : répertoire courant) n'est pas dans votre path, même si ls peut voir les fichiers, votre shell ne le peut pas. Le shell peut exécuter make parce que normalement il se trouve dans /usr/bin qui est dans le path. Pour voir votre path, tapez:

echo $PATH [Entrée]

Si quelque chose ne va pas:

La plupart des erreurs courantes lorsque ça ne compile pas sont dûes à des fichiers manquant. La majorité des programmes s'appuient sur d'autres programmes/fichiers/bibliothèques. S'ils sont manquant, le programme ne peut pas se compiler. Les fichiers README/INSTALL devraient vous avertir des fichiers et de leurs versions nécessaires pour compiler le programme. A noter: vous vous ferez autant avoir avec une mauvaise version que de ne pas l'avoir du tout. D'habitude vous saurez si c'est ce problème parce que le message d'erreur à la fin de la compilation vous indiquera un certain fichier manquant. A noter: quelques fois vous avez le fichier mais il n'est pas là où Makefile vous l'indique. Utilisez le programme d'installation de votre distribution linux, par exemple rpm, et vérifiez si vous avez le fichier manquant. Si ce n'est pas le cas, allez le chercher. Si vous l'avez et que c'est la bonne version, vérifiez le Makefile pour voir où il croit que le fichier se trouve. Exemple: disons que le fichier moc est dans /usr/local/bin, mais que Makefile vous dit: moc=/opt/bin/moc. Alors il suffit d'éditer le Makefile (avec vi ou ce que vous utilisiez pour éditer) et de changez l'emplacement de moc.

Le problème courant suivant est l'absence de fichiers include. La plupart des fichiers dans le répertoire source ont des lignes à leur début qui ressemblent à cela:

    #include <gtk/gtk.h> 
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdlib.h>

Ces fichiers "h" (ou fichier d'entête, "h" pour "header files") doivent exister sur votre ordinateur. Au minimum, vérifiez que vous avez les fichiers d'entête du noyau par : ls /usr/include/linux/. Si vous avez des bibliothèques installées, comme gtk, assurez vous d'avoir aussi installé les fichiers de développement. Parfois avoir de multiples versions de la même bibliothèque peut causer des problèmes car chaque version peut disposer ses fichiers d'entête dans des endroits différents et vous ne saurez pas lesquels de ces fichiers seront utilisés lors de la compilation.

Si vous avez effectué tous les changements du Makefile et que vous avez toutes les bibliothèques et les fichiers include et que cela ne compile toujours pas, faire ce qui suit DANS L'ORDRE:

Pour terminer, il y a quelques programmes qui ont une configuration spéciale avant la compilation : qt et le noyau viennent immédiatement à l'esprit. Pour les compiler, je vais enfoncer le clou une fois de plus : lisez les fichiers README et INSTALL !

Copyright 1999, JC Pollman

Publié dans le numéro 38 de la Linux Gazette, mars 1999

Adaptation française : Frédéric Gacquer (Neuronnexion)


Next Previous Contents