Linux keskecè ? Pour faire quoi ? Essayer Linux Bureaux graphiques 2D/3DBlackbox, Enlightenment, Gnome, KDE, WindowMaker, XGL / Compiz / Beryl,... Linux Girls
Comparatifs   Arch Linux   Debian   Dreamlinux   Mandriva   Ubuntu   Sabayon   Yoper live CD/DVDKnoppix, Kaella, Elive, GComprix, TRK, Wolvix, SuperGamer, ... Sur clé USB / iPodBureau portable ~   de Jeux / Gamers ~   localiséesPhaeronix, Arabian Linux, Ehad Linux (ultra)légèresAustrumi, Damn Small Linux, DeliLinux, Toutou, ... ÉducativesAbulÉdu, Edubuntu, GComprix Rescue / sauvetage /  restaurationGParted, PartedMagic, SystemRescue, RIS, TRK Serveur / firewall Liens
Bureautique Éducatif Gravure Graphisme 2/3D Internet / P2P Jeux sous Linux Développement Web Son & Vidéo Outils Gestionnaires de fenêtres   WM : Fluxbox Écrire en Chinois, Japonais, Coréen, Arabe, Russe, ... écrire en japonais Émulation & Virtualisation Apps Windows /Linux
l'Installation l'Administrateur "root" les Utilisateurs Périphériques PC portables Gérer le pingouin l'Affichage graphique le Réseau la Sécurité Installer & configurer les logiciels le Noyau Conclusion
Commandes shell Dameons Partitions FAT & NTFS Sauvegarder Clonage disques Configurer Mandriva RPMdrake uRPMi RPMbuild le Guide de survie sous Linux Centre de contrôle Mandriva Le kernel (noyau) Compiler une application
Acquisition vidéo APNs & webcams Optimiser ses Disques: hdparm Gestion Disques: Raid & LVM Imprimantes & Scanners les NAS sous LinuxNetwork Attached Storage PCs & ultra-portables Pilotes nVidia, nForce, ATI & Intel nVidia ou ATI ? Speedtouch & modems USB Wi-Fi

Pages liées

Configurer les applis

PackagesCompiler ~

Tux kernel compilation guideLiens →

Freashmeat : des milliers d'applicationsfreashmeat

SourceFORGE.net : softwares mapsourceForge

lea-linuxlogiciels

le kernel par lea-linuxDate un peu mais la plupart des commandes sont tj valables

Compiler kernel trustonme.net

framasoftframasoft

Index des articles qui présentent et évaluent des Applications sous Linux.Applications sous Linux

Gestionnaires logiciels

APT, dpkg-deb, alien ~

Synaptic ~

Pacman ~

urpmi ~

YUM ~

YaST ~

Scripts utiles

Scripts pour l'utilisateur - Forums Ubuntu-fr

échange bannières

K> HOWTOS
petite bannière pour placer un lien vers cette page

Bonnes affaires

ebuyclub.com

Actu

Candidats.fr 2008, c'est parti !

Manifestation cyclo-nudiste à Paris le 9 juin 2007

J'aime le Liban - Ouhib Lubnan - I love Lebanon

Bilan des destructions au Liban

 HowTo > Linux > Administration >

image Tux Makefilecompiler une appli

Pourquoi compiler une application ?

Plusieurs raisons à cela :

I - DÉMARCHE USUELLE (ou la sainte trinité de tout linuxien ;o)

A - Récupérer les sources

Tout d'abord vous devez récupérer les sources de l'application, sous forme d'un fichier.tar.gz ,.tgz, .tar.bz2, ou .src.rpm, etc.

linux girl Vérifiez d'abord sur le(s) CD(s) de sources de votre distribution, il se peut très bien que ce que vous cherchez y soit (quand vous avez ce CD).
Sinon, vous devrez le récupérer autrement (CD d'une revue, internet (Freshmeat  ou Tucows.linux  par exemple), etc.).
Bref, tous les moyens sont bons. Essayez d'avoir la dernière version, tant qu'à faire, puis passez à la suite.

B - Comment compiler les différentes sources

La procédure diffère suivant le format des sources (plus précisemment le format de compression : .tar.gz/.tgz ou .tar.bz2/.tbz2) .
Pour vérifier votre version de 'tar' (sous Linux vous devriez disposer de GNU tar), tapez

$ tar --version

La 1ère ligne de l'outpout devrait dire qu'il s'agit de GNU tar, sinon c'est que vous utilisez une autre version.

A la base : $ tar [-C {repertoire}] -xvzf {fichier.tar.gz} (entre crochets [] : optionnel)
L'option -C {répertoire} si vous désirez extraire tous les fichiers dans un répertoire spécifique.
En fait :

  1. tar xvf bidule.tar
  2. tar xvzf bidule.tar.gz
  3. tar xvjf bidule.tar.bz2
    x pour extraire,
    v pour voir ce qui se passe
    , z (compression Gzip) ou j (Bzip2),
    f pour dire qu'il s'agit d'un fichier.
  4. CF man tar (merci à mattaw)

1) Sources au format .src.rpm ou .srpm

nb : .src.rpm source pour développeurs
La compilation se fait en une seule ligne de commande généralement, elle génère un package .i586.rpm (ou .alpha.rpm suivant votre architecture) :
# rpm --rebuild le_package-version.src.rpm

Cela va créer un package au format RPM : le_package-version.i?86.rpm dans le répertoire /usr/src/RPM/RPMS/i?86. Ce répertoire peut différer légèrement suivant la distribution.
Il faut ensuite installer ce package par la commande RPM habituelle :
# rpm -ivh le_package-version.i586.rpm
Voyiez le guide RPMdrake pour les autres commandes.

2) Sources au format .tar.*

C'est le format le plus souvent employé pour les sources. Le nom du package est en général le nom du fichier suivi de la version. Par exemple : xtel-3.2.1.tar.gz. tgz est une contraction de "tar.gz".

a) Décompresser les sources

Il faut d'abord décompresser le package dans le répertoire de votre choix. /usr/src me semble un bon choix, mais vous êtes libres.
# cd /usr/src (se placer dans le rép. où on veut décompreser) ;
# tar zxvf /ou/se/trouve/le_package.tar.gz
ou bien : # tar yxvf /ou/se/trouve/le_package.tar.bz2
ou bien : # tar jxvf /ou/se/trouve/le_package.tar.bz2
Si votre version de tar ne comprend pas la dernière commande, essayez :

# tar --use-compress-program bzip2 \
		-xvf /ou/se/trouve/le_package.tar.bz2

suite Remarque : avant de décompresser pour de bon l'archive, il peut être bon de la tester, notamment pour vérifier qu'elle va bien se décompresser dans son propre répertoire, en remplaçant la commande x (comme extrait) de tar (ci-dessus) par un t (comme test) :

# tar ztvf /ou/se/trouve/le_package.tgz

Toutes les lignes (la liste des fichiers présents dans l'archive) doivent commencer par "le_package/..." ce qui assure que l'archive se décompressera dans le répertoire du même nom. Dans le cas contraire, créez un répertoire à la main (mkdir) allez-y (cd) puis exécutez la commande tar voulue.

b) Compiler les sources

Rq: il est possible d'optimiser la compilation des applications en fonction de la puissance de votre cpu: optimiser la compilation

La compilation peut différer selon chaque package, car l'auteur est libre de procéder comme bon lui semble. Cependant des standards de fait existent et sont généralement bien suivis : la présence de fichiers README et INSTALL dans l'archive.
C'est pourquoi il est fortement recommendé de lire ces fichiers avant de commencer, car ils donnent les détails pour bien compiler. L'un des deux a en général une section "installation" ou "compilation" qui donne les étapes à suivre. Ils indiquent aussi quels sont les prérequis (les librairies dont le logiciel a besoin), les configurations à faire sur votre système pour que l'appli fonctionne, etc.
De plus en plus souvent, les archives contiennent un fichier exécutable nommé "configure". Dans ce cas, la compilation est assez s"info"le, car le programme "configure" détecte les spécificités de votre machine automatiquement. Il suffit généralement de faire :

$ ./configure
$ make
(passez en root pour une installation système / tous utilisateurs)
# make install

Et c'est tout !
Le programme devrait être installé sur votre système à présent. Certains progr. s'installent dans /usr/local/bin, donc vous devez éditer /etc/ld.so.conf en y ajoutant le chemin de la librairie du programme
Cependant lisez toujours le fichier README, car il faut parfois passer des commandes à configure.

Dans les cas ou il n'y a pas de script "configure" :

Si vous avez un fichier Imakefile, vous pouvez essayer :

# xmkmf
# make
Enfin s'il n'y a qu'un fichier Makefile ou makefile

essayez juste :
# make

Bref, il y a plein de façons de faire, mais dans tous les cas lisez les fichiers README et autres LISEZMOI.

Parfois, même en suivant bien les recommendations, cela coince

C'est souvent dû au fait que les distributions ne placent pas toutes les mêmes choses au même endroit, et que le développeur de l'appli n'a pas la même distribution que vous. Dans ce cas, regardez le fichier qui "coince", et s'il vous dit qu'il ne trouve pas tel ou tel fichier, recherchez-le sur votre disque dur (utilisez le couple updatedb / locate, très pratique), et n'hésitez pas à modifier le fichier source (avec votre éditeur de texte préféré) afin de faire pointer le fichier vers le bon endroit. Vérifiez aussi le Makefile.


topofpage


Comment on fait pour INSTALLER UN .tar.gz, .tar.bz2 ou .tgz ?

par: ThE_TemPLar


Alors voila :

1. Copiez (ou telechargez) tout d'abord le fichier .tar.gz a l'endroit voulu.

Dans ce petit tutorial je supposerais que vous etes root et seulement root (pas su, sous un shell,.code, console, xterm, Konsole, gnome Terminal, Eterm ou autre truc de ce genre...

¤ Dans /usr/src (/user/sources) vous faites un zoli rangement pour vous y retrouvez ;):
mkdir {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} && mkdir lib{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}

Bon voila vous avez un zoli /usr/src maintenant vous copiez, votre fichier tar.gz a l'endroit destine MIS A PART POUR LE NOYAU que vous déballez DANS /USR/SRC !! (exemple iirc dans i, kdelibs dans k)
Apres vous, faites des sous rep. si vous voulez ( détail de la commande )

Puis vous dépacketez grace a la magnifique commande tar :
Si c'est un tar.gz :
tar -zxvf fichier-version.tar.gz (ou fichier-version.tgz)

Ou si c'est un .tar.bz2 :
tar -jxvf (ou tar -yxvf) fichier-version.tar.bz2
Là, vous verrez dans la plupart des cas : fichier-version/fichier.c

2. Compilez

Dès que le depaquetage s'arrete (on dis déballer ou dépaqueter une archive [en anglais: archive ou tarball]), vous allez dans le dossier cree et la vous lisez le(s) fichier(s) :
  - README
  - INSTALL
  - Changelog (occasionnellement)

Parfois ces fichiers se trouvent dans un repertoire: doc [ex qt], install [ex gcc] ou autre, enfin cherchez un peu :).
Lisez les FAQ en cas, et faites tres attention aux conseils donnes dans le README, verifiez que vous avez les libs qu'il faut, tout le barratin et autre.

3. Options de compilation

¤ Bon vous avez tout lu, donc vous etes dans le dossier du tarball (archive) depackete, a cet endroit vous faites :
./configure --help | less pour connaitre les options du configure.

Il y a des options communes comme :
--prefix=/dossier : le dossier racine où on veut mettre les fichiers, c'est a dire que les binaires seront dans /dossier/bin donc si vous mettez /usr ca fera /usr/bin, comprendo¿
--sysconfdir=PREFIX/etc : normalement les fichiers de config se mettront dans le dossier du prefix/etc (si il n'y a pas de prefix, le prefix par defaut est generalement /usr/local).
Si vous mettez /usr pour PREFIX, mettez /etc pour SYSCONFDIR, car ca correspondra a vos demandes.
--localstatedir=PREFIX/var : normalement les fichiers locaux, independant du systeme se mettront dans PREFIX/var comme pour sysconfdir avec PREFIX/var.
Je vous conseille de mettre /var si vous avez mis /usr a PREFIX.
--with-gnu-ld : mis à part si vous utilisez EGCS dans ce cas, vous avez installé le compilateur tout seul et vous etes assez experimenté vous savoir ce que c'est, généralement vous avec gcc (Gnu C Compiler, Gnu Compiler Collection) qui utilise le linker dynamic : ld. Donc c'est un flag a mettre si vous avez gcc, cela permet de regler certains problemes (surtout avec les compilateurs)
Si une de ces options citees n'est pas ./configure help | less, ne la mettez pas et regardez les options que vous avez.
(avec less: fleche bas pour voir le bas du document et q pour quitter, en fait ça pipe la sortie stdout vers un fichier temporaire dans /tmp et prend vi pour l'analiser, les commandes sont donc celles de vi )

Après la configuration des sources, faites
make,
Et : make -n install, puis : make install.

Donc on résume :

suite À ce moment la les fichiers binaires, de configuration, et les librairies sont installées, faites quelques essais puis si le logiciel marche, effacez le dossier du tarball: rm -r fichier-version, mais pas le tarball qui peut servir ;).

topofpage

III - Trucs & actuces pour les sources utilisant AUTOCONF

A - Indiquer où installer les sources

Souvent, pour tester un programme récent, vous souhaiterez installez celui-ci ailleurs que la destination par défaut prévue par l'auteur du programme.

Si celui-ci utilise les paquetages autoconf, la solution est s"info"le, puisque prévue par le paquetage : il suffit de le dire au script configure. Placez vous dans le résertoire contenant les sources du logiciel, et tapez :
$ ./configure --prefix=/opt/[destination]
Cette méthode indique au script configure quelle est la racine de l'installation ; en général l'installation proprement dite créera une arborescence :
+ma-destination +--> bin +--> share +--> etc +--> include +--> lib `--> doc
dans laquelle seront effectivement copiés les fichiers nécessaires à la compilation de programme utilisant cette librairie, et les programmes eux-mêmes.

Mais, vous pouvez vouloir préciser beaucoup plus finement le type de l'installation.
Par exemple, vous souhaitez que tous vos fichiers de configuration soient stockés dans /etc (c'est le FHS - File Hierarchy Standard). Alors il faut taper :
$ ./configure --prefix=/opt/ma-destination --sysconfdir=/etc

Exemple :
Templar : Il faut savoir où mettre tes fichiers de config pour les logiciels :

Ou installer l'appli: ./configure --prefix=/opt
>i tu veux que les fichiers de config soient dans /etc : --sysconfdir=/etc
Et si tu veux que les fichiers locaux (ils appellent ça comme ça) soit midans /var : --localstatedir=/var
Pour en savoir plus sur les diverses options de ./configure, fais :
$ ./configure --help | less
donc, si on veut install un tarball dans /opt, on doit entrer :
./configure --prefix=/opt --sysconfdir=/etc --localstatedir=/var

Le script ./configure se plaint de l'absence d'une librairie !

Mais, vous, vous savez que vous l'avez installée dant /opt/devlib en utilisant une ligne :
$ ./configure --prefix=/opt/devlib
Si ./configure se plaint, c'est qu'il n'est pas capable de trouver la dite librairie ! (Le script a sans doute "oublié" de tester la présence d'un autre script : malib-config ... ).

Note aux développeurs de programmes utilisant gtk et imlib : les deux ne sont pas liées directement, on peut les installer dans deux répertoires différents, donc s'il vous plaît utilisez gtk-config et imlib-config pour savoir où sont installées ces deux librairies).

Il faut savoir que ./configure utilise les variables shell standard CC, CFLAGS, CXX, CXXFLAGS, LDFLAGS pour savoir comment utiliser le compilateur.
Donc l'astuce, puisque ./configure ne trouve pas la librairie, est de passer par ces variables en précisant par exemple :

Puis de relancer ./configure avec les options idoines. Ceci règle quelques problèmes seulement, mais il est bon de les connaître avant de râler que les programmes libres c'est bien qu'est-ce que c'est pénible à installer.
Utilisez les variables CC et CXX pour indiquer à ./configure d'utiliser CC comme compilateur C et CXX comme compilateur Crel="external".

B - Optimiser la compilation d'un programme pour votre processeur

Là c'est s"info"le, il suffit de faire (une fois que vous avez lu le paragraphe précédant) :

$ export CFLAGS="-mcpu=i686 -O6"
	$ export CXXFLAGS="-mcpu=i686 -O6"

avant de lancer ./configure, pour dire aux compilateurs C et Crel="external" de compiler pour l'architecture i686 (pour la classe pentium pro et pentium II ; on peut utiliser i586 pour les pentiums, i486, i386, et sans doute d'autres options), avec le niveau d'optimisation 6 pour la vitesse d'exécution maximum (attention O6 est un peu risqué - paraît-il, mais je n'ai jamais eu de problème - donc si votre programme a des difficultés à fonctionner avec ce niveau d'optimisation, avant de vous plaindre au développeur, essayez -O1 comme niveau ;).

Quelques fois, le script ./configure prévoit des optimisations, par exemple il faut taper :
$ ./configure --optimization=yes
Utilisez ./configure --help pour le savoir!
On peut d'après les créateurs du compilateur egcs (renommé gcc 1.1.2 alias 2.92.2) obtenir au moins 5% de performance en plus, & jusqu'a 30% de performance en plus pour certains (très rares) programmes... ce peut etre la différence entre une animation fluide et saccadée...

attention Enfin, il n'est pas recommandé de compiler des programmes vitaux pour la sécurité avec des options non standard, par exemple ne compilez pas votre serveur Apache avec ces options si elles ne sont pas supportées par l'équipe de développement d'Apache ! Sinon, en cas de trou de sécurité dans votre configuration, vous risquez de ne pas être entendu.

Autres formats
Merci d'ajouter vos liens et howtos sur le forum, pour la compilation des sources avec d'autres format de packages ? (Je pense aux packages Debian par exemple.)