Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tutoriel:compilation [Le 10/09/2010, 04:47]
YannUbuntu Désinstaller un programme compilé
tutoriel:compilation [Le 13/02/2024, 11:06] (Version actuelle)
82.66.54.102 [Récupérer le code source]
Ligne 1: Ligne 1:
-{{tag>Dapper Hardy compilation paquet tutoriel}} +{{tag> compilation paquet tutoriel}}
 ---- ----
- 
  
 ====== Installer un logiciel ou une bibliothèque par compilation ====== ====== Installer un logiciel ou une bibliothèque par compilation ======
  
 +En informatique,​ la **compilation** (d'un logiciel ou d'une bibliothèque) est une procédure par laquelle un code source (format compréhensible par un humain, type [[#ASCII]]) est transformé en code [[#​binaire]],​ un langage compréhensible par votre ordinateur, dans le but d'​être exécuté. ​ Un logiciel est compilé afin de pouvoir être lancé par l'​utilisateur.
  
-En informatique,​ la **compilation** (d'un logiciel ou d'une bibliothèque) est un procédure par laquelle un code source (format compréhensible par un humaintype [[#​ASCII]]) ​est transformé en code [[#​binaire]],​ un langage compréhensible par votre ordinateur, dans le but d'​être exécuté. ​ Un logiciel est compilé afin de pouvoir être lancé par l'​utilisateur.+<​note>​Compiler soi-même ​un logiciel ou une bibliothèque ​peut apporter quelques avantagesmais est souvent à éviter pour le néophyte du monde linuxien.</​note>​
  
- +Cette documentation présente une méthode //​généraliste//​ et //​vulgarisée//​ pour compiler des programmes et des bibliothèques. 
-Compiler soi-même un logiciel ou une bibliothèque peut apporter quelques avantages, mais est souvent à éviter pour le néophyte du monde linuxien. ​Cette documentation présente une méthode //​généraliste//​ et //​vulgarisée//​ pour compiler des programmes et des bibliothèques. ​ Elle devrait être utilisée, le plus fréquemment,​ **lorsque les autres méthodes d'​installation de programmes ont échoué**:+<note important>​Elle devrait être utilisée, le plus fréquemment,​ **lorsque les autres méthodes d'​installation de programmes ont échoué**:</​note>​
  
   - Le [[:​apt|système de gestion de paquets APT]] permet d'​installer simplement énormément de logiciels répondant aux besoins quotidiens de l'​utilisateur moyen. ​ Lorsque c'est possible, //​**privilégiez cette méthode**//​!   - Le [[:​apt|système de gestion de paquets APT]] permet d'​installer simplement énormément de logiciels répondant aux besoins quotidiens de l'​utilisateur moyen. ​ Lorsque c'est possible, //​**privilégiez cette méthode**//​!
-  - Si un logiciel n'est pas disponible dans les dépôts APT par défaut d'​Ubuntu,​ il est peut-être disponible en [[:​apt#​le_paquet|paquet Ubuntu (.deb)]] sur un autre dépôt ou directement sur le site du distributeur du logiciel. ​ Vérifiez si un paquet est disponible sur le site du distributeur. +  - Siun logiciel n'est pas disponible dans les dépôts APT par défaut d'​Ubuntu,​ il est peut-être disponible en [[:​apt#​le_paquet|paquet Ubuntu (.deb)]] sur un autre dépôt ou directement sur le site du distributeur du logiciel. ​ Vérifiez si un paquet est disponible sur le site du distributeur. 
-  - Si un logiciel n'​existe pas en paquet .deb mais est disponible en d'​autres types de paquets (.rpm, .slp, .tgz), le logiciel [[:alien]] est d'une bonne utilité+  - Siun logiciel n'​existe pas en paquet .deb mais est disponible en d'​autres types de paquets (.rpm, .slp, .tgz), le logiciel [[:alien]] est d'une bonne utilité.
-  - Plus rarement, certains distributeurs vont distribuer leurs logiciels sous forme de paquet pour [[:​Autopackage]]. ​ Cette méthode d'​installation reste simple, mais n'est pas toujours très propre.+
   - Enfin, d'​autres distributeurs,​ comme [[http://​www.mozilla.com|Mozilla]],​ publient leurs logiciels sous forme de [[:​wiki:​glossaire#​binaire|code binaire]], donc déjà compilé.   - Enfin, d'​autres distributeurs,​ comme [[http://​www.mozilla.com|Mozilla]],​ publient leurs logiciels sous forme de [[:​wiki:​glossaire#​binaire|code binaire]], donc déjà compilé.
  
-Lorsque aucune de ces possibilités n'est valable pour le programme que vous cherchez à installer, vous devrez alors passer par la compilation. ​ Le mot est gros et semble effrayant, mais l'est moins qu'il n'y paraît; essayons de démystifier ensemble ce procédé. +<​note>​Lorsque aucune de ces possibilités n'est valable pour le programme que vous cherchez à installer, vous devrez alors passer par la compilation. ​</​note>​ 
- +Le mot est gros et semble effrayant, mais l'est moins qu'il n'y paraît; essayons de démystifier ensemble ce procédé.
- +
  
  
Ligne 31: Ligne 27:
  
 Seulement, tout n'est pas toujours disponible à l'aide d'un de ces systèmes simplifiés. C'est le cas, par exemple, de certains pilotes pour vos périphériques ou encore de logiciels en cours de développement. Ubuntu étant une distribution orientée poste de travail et visant à être accessible à tous, nous espérons que vous aurez essayé les autres méthodes disponibles auparavant, la compilation représente la dernière solution à vos problèmes. Seulement, tout n'est pas toujours disponible à l'aide d'un de ces systèmes simplifiés. C'est le cas, par exemple, de certains pilotes pour vos périphériques ou encore de logiciels en cours de développement. Ubuntu étant une distribution orientée poste de travail et visant à être accessible à tous, nous espérons que vous aurez essayé les autres méthodes disponibles auparavant, la compilation représente la dernière solution à vos problèmes.
- 
- 
  
  
 ===== Préalables ===== ===== Préalables =====
  
-Ubuntu n'​inclut pas, de base, tous les outils nécessaires pour procéder à la compilation de logiciels et bibliothèques. ​ Ces outils peuvent toutefois être installés à l'aide de [[:​Synaptic]] ou de [[:​Apt-get]],​ car ils se trouvent sur le CD-ROM d'​installation de Ubuntu, de même que dans les [[:​depots#​principaux|dépôts APT]] officiels. Le méta-paquet à installer se nomme  **build-essential**.+Par défaut, ​Ubuntu n'​inclut pas tous les outils nécessaires pour procéder à la compilation de logiciels et bibliothèques. ​ Ces outils peuvent toutefois être installés à l'aide de [[:​Synaptic]] ou de [[:​Apt-get]],​ car ils se trouvent sur le CD-ROM d'​installation de Ubuntu, de même que dans les [[:​depots#​principaux|dépôts APT]] officiels. Le méta-paquet à installer se nomme  **build-essential**.
  
 Nous vous suggérons aussi d'​installer les paquets « fakeroot » et « checkinstall » et nous supposerons que vous les aurez installés. L'​outil « checkinstall » surveille la procédure d'​installation et crée un paquet « .deb » qui sera présent dans votre liste de paquets installés. ​ Ceci aura pour avantage de vous permettre une désinstallation simplifiée et propre, si vous souhaitez désinstaller ultérieurement vos logiciels et bibliothèques. Nous vous suggérons aussi d'​installer les paquets « fakeroot » et « checkinstall » et nous supposerons que vous les aurez installés. L'​outil « checkinstall » surveille la procédure d'​installation et crée un paquet « .deb » qui sera présent dans votre liste de paquets installés. ​ Ceci aura pour avantage de vous permettre une désinstallation simplifiée et propre, si vous souhaitez désinstaller ultérieurement vos logiciels et bibliothèques.
  
-En résumé, vous devriez [[:​tutoriel:​comment_installer_un_paquet|installer les paquets]] **[[apt://build-essential|build-essential]]** **[[apt://fakeroot|fakeroot]]** **[[apt://checkinstall|checkinstall]]**. +En résumé, vous devriez [[:​tutoriel:​comment_installer_un_paquet|installer les paquets]] **[[apt>build-essential|build-essential]]** **[[apt>fakeroot|fakeroot]]** **[[apt>checkinstall|checkinstall]]** ​ .
- +
- +
  
  
 ===== Récupérer le code source ===== ===== Récupérer le code source =====
  
-Le code source d'un logiciel en version stable est habituellement disponible sous forme d'​archive compressée au format « tar.gz » ou « .tar.bz2 » voire « .zip ». Certaines personnes (particulièrement des développeurs) vont préférer récupérer la toute dernière version de développement du logiciel (avec toutes les complications qu'il peut contenir) ; celle-ci peut être récupérée depuis un dépôt [[:​CVS]] ​ou, de plus en plus, [[:​subversion|SVN]].+Le code source d'un logiciel en version stable est habituellement disponible sous forme d'​archive compressée au format « tar.gz » ou « .tar.bz2 » voire « .zip ». Certaines personnes (particulièrement des développeurs) vont préférer récupérer la toute dernière version de développement du logiciel (avec toutes les complications qu'il peut contenir) ; celle-ci peut être récupérée depuis un dépôt [[:CVS]], [[:​subversion|SVN]] ou [[:Git]].
  
 ==== Dépendances ==== ==== Dépendances ====
Ligne 79: Ligne 70:
 Vous pouvez aussi utiliser directement build-dep : Vous pouvez aussi utiliser directement build-dep :
  
-  sudo apt-get build-dep+  sudo apt-get build-dep ​amsn
  
 S'il vous manque des dépendances,​ le logiciel ne sera pas compilé correctement. ​ Le processus (''​./​configure''​) se terminera par un échec dès qu'une dépendance est manquante. ​ De façon générale, le message d'​erreur retourné (dans les quelques dernières lignes) indique clairement quelle dépendance est manquante. Notez alors ce message d'​erreur et recherchez cette dépendance à satisfaire dans votre gestionnaire de paquets. Recommencez ensuite le processus de compilation. S'il s'​arrête de nouveau, vérifiez si une autre dépendance n'est pas satisfaite ((C'​est certainement pour cette raison (des dépendances insatisfaites) que la compilation est considérée comme longue et fastidieuse.)). S'il vous manque des dépendances,​ le logiciel ne sera pas compilé correctement. ​ Le processus (''​./​configure''​) se terminera par un échec dès qu'une dépendance est manquante. ​ De façon générale, le message d'​erreur retourné (dans les quelques dernières lignes) indique clairement quelle dépendance est manquante. Notez alors ce message d'​erreur et recherchez cette dépendance à satisfaire dans votre gestionnaire de paquets. Recommencez ensuite le processus de compilation. S'il s'​arrête de nouveau, vérifiez si une autre dépendance n'est pas satisfaite ((C'​est certainement pour cette raison (des dépendances insatisfaites) que la compilation est considérée comme longue et fastidieuse.)).
Ligne 104: Ligne 95:
 ===== Compiler ===== ===== Compiler =====
  
-Pour compiler un programme sans utiliser sudo rajouter l'​utilisateur au groupe src. FIXME ???\\ +Pour compiler un programme sans utiliser sudo rajouter l'​utilisateur au groupe src. 
-<​code>​ +<​code ​bash
-sudo addgroup $USER src+sudo usermod -aG src user
 </​code>​ </​code>​
  
 D'​ordre général, la compilation d'un logiciel s'​effectuera de la façon suivante : D'​ordre général, la compilation d'un logiciel s'​effectuera de la façon suivante :
- +<code bash> 
-  cd /​chemin_vers_le_répertoire_des_sources +cd ''​/​chemin_vers_le_répertoire_des_sources''​ 
-  ./​configure +test -f configure || sh autogen.sh #facultatif 
-  make +./​configure ​--enable-optimizations 
-  sudo checkinstall+make 
 +sudo checkinstall ​# ou sudo make install dans ce cas il n'y aura pas de construction de deb 
 +</​code>​
  
 Voyons, en étapes, cette procédure : Voyons, en étapes, cette procédure :
  
-  - On se rend dans le répertoire dans lequel se trouve le code source du logiciel ou de la bibliothèque à compiler. +  - On se rend dans le répertoire dans lequel se trouve le code source du logiciel ou de la bibliothèque à compiler ​en utilisant la commande [[tutoriel/​console_commandes_de_base#​cd|cd]]
-  - On appelle l'​utilitaire « configure » se trouvant dans ce répertoire. Celui-ci vérifie que toutes les dépendances du logiciel ou de la bibliothèque à compiler sont bien satisfaites. ​Si certaines ​ne sont pas satisfaites,​ il s'​arrête en indiquant ce qui est manquant pour continuer la procédure. Voir juste après comment corriger cela.+  - On appelle l'​utilitaire « configure » se trouvant dans ce répertoire. Celui-ci vérifie que toutes les dépendances du logiciel ou de la bibliothèque à compiler sont bien satisfaites. ​Sicertaines ​ne sont pas satisfaites,​ il s'​arrête en indiquant ce qui est manquant pour continuer la procédure. Voir juste après comment corriger cela.
   - On effectue la compilation en exécutant la commande « make », qui se charge d'​appeler le compilateur. ​ C'est certainement l'​étape la plus longue.   - On effectue la compilation en exécutant la commande « make », qui se charge d'​appeler le compilateur. ​ C'est certainement l'​étape la plus longue.
-  - Finalement, le code binaire étant généré, il ne reste qu'à installer le logiciel ou la bibliothèque. On appelle le programme ​« checkinstall ​» (qui nécessite [[:sudo|les droits du super-utilisateur]]),​ qui surveille son installation et génère, à la fin, un paquet « .deb ».+  - Finalement, le code binaire étant généré, il ne reste qu'à installer le logiciel ou la bibliothèque. ​\\ 
 +On appelle le programme 
 +<code bash> 
 +sudo checkinstall 
 +</​code>​ 
 +(qui nécessite [[:sudo|les droits du super-utilisateur]]),​ qui surveille son installation et génère, à la fin, un paquet « .deb ».
  
-<note important>​Le paquet obtenu lors de l'​utilisation de ''​checkinstall''​ n'est absolument pas destiné à être diffusé. Son rôle est simplement de vous permettre de désinstaller plus proprement le logiciel ultérieurement et par l'​intermédiaire du gestionnaire de paquets.</​note>​+<note important>​Le paquet obtenu lors de l'​utilisation de ''​checkinstall''​ n'est absolument pas destiné à être diffusé. ​ 
 +Son rôle est simplement de vous permettre de désinstaller plus proprement le logiciel ultérieurement et par l'​intermédiaire du gestionnaire de paquets.</​note>​
  
  
Ligne 135: Ligne 134:
 Tout paquet Debian/​Ubuntu qui se respecte liste toutes les dépendances qui lui sont nécessaires tant à l'​exécution comme à la compilation. La manière la plus simple de télécharger les dépendances est d'​utiliser apt-get avec l'​option build-dep, ainsi la commande : Tout paquet Debian/​Ubuntu qui se respecte liste toutes les dépendances qui lui sont nécessaires tant à l'​exécution comme à la compilation. La manière la plus simple de télécharger les dépendances est d'​utiliser apt-get avec l'​option build-dep, ainsi la commande :
  
-   sudo apt-get build-dep epdfview+<code bash> 
 +sudo apt-get build-dep epdfview 
 +</​code>​
  
 Va s'​occuper de télécharger toutes les dépendances nécessaires à la compilation du projet. Bien sûr cette technique ne fonctionne que si le paquet existe déjà . Va s'​occuper de télécharger toutes les dépendances nécessaires à la compilation du projet. Bien sûr cette technique ne fonctionne que si le paquet existe déjà .
Ligne 141: Ligne 142:
 === Les erreurs de « configure » === === Les erreurs de « configure » ===
  
-Si les dépendances ne sont pas installées,​ l'​étape de configuration ​(« ./​configure ​») n'ira pas jusqu'​au bout et vous donnera un message d'​erreur indiquant ce qui manque.+Siles dépendances ne sont pas installées,​ l'​étape de configuration 
 + 
 +<code bash> 
 +./configure 
 +</​code>​ 
 + n'ira pas jusqu'​au bout et vous donnera un message d'​erreur indiquant ce qui manque.
 Prenons l'​exemple de la dépendance manquante « gtk+-2.0 ». Prenons l'​exemple de la dépendance manquante « gtk+-2.0 ».
 On nous indique alors : On nous indique alors :
Ligne 179: Ligne 185:
 Les fichiers appelés par les programmes en C sont des parties de bibliothèques (traduction de « library »). Les bibliothèques sont des ensembles de fonctions (des mini-programmes qui effectuent une tâche précise, par exemple réunir deux mots en un seul, afficher une image, réagir lorsqu'​on clique...) qui n'ont pas besoin d'​être réécrites à chaque fois que quelqu'​un veut développer un logiciel. Par exemple, les bibliothèques GTK et Qt dépendent toutes deux de « libpng », qui sert à manipuler des images « .png » (pour un résultat totalement différent). Les fichiers appelés par les programmes en C sont des parties de bibliothèques (traduction de « library »). Les bibliothèques sont des ensembles de fonctions (des mini-programmes qui effectuent une tâche précise, par exemple réunir deux mots en un seul, afficher une image, réagir lorsqu'​on clique...) qui n'ont pas besoin d'​être réécrites à chaque fois que quelqu'​un veut développer un logiciel. Par exemple, les bibliothèques GTK et Qt dépendent toutes deux de « libpng », qui sert à manipuler des images « .png » (pour un résultat totalement différent).
  
-Chez Ubuntu (comme sur toutes les distributions basées sur Debian), les bibliothèques sont dispatchées ​dans plusieurs paquets (au minimum). Prenons l'​exemple de « libfltk ». Elle est installée dans « libfltk1.1 » et dans « libfltk1.1-dev » (« libfltk1.1 » et « libfltk1.1-dev » étant les noms des paquets, installables //via// [[:​APT]]). +Chez Ubuntu (comme sur toutes les distributions basées sur Debian), les bibliothèques sont distribuées ​dans plusieurs paquets (deux au minimum). Prenons l'​exemple de « libfltk ». Elle est installée dans « libfltk1.1 » et dans « libfltk1.1-dev » (« libfltk1.1 » et « libfltk1.1-dev » étant les noms des paquets, installables //via// [[:​APT]]). 
-La bibliothèque « libfltk1.1 » contient les fichiers nécessaires à **l'​exécution** d'un programme se servant de cette bibliothèque ([[http://​packages.ubuntu.com/​cgi-bin/​search_contents.pl?​searchmode=filelist&​word=libfltk1.1&​version=dapper&​arch=i386|voir ce paquet]]), c'​est-à-dire des fichiers « .so.x.y » installés dans « /usr/lib ».  +La bibliothèque « libfltk1.1 » contient les fichiers nécessaires à **l'​exécution** d'un programme se servant de cette bibliothèque ([[https://​packages.ubuntu.com/​cgi-bin/​search_contents.pl?​searchmode=filelist&​word=libfltk1.1&​version=dapper&​arch=i386|voir ce paquet]]), c'​est-à-dire des fichiers « .so.x.y » installés dans « /usr/lib ». 
-La bibliothèque « libfltk1.1-dev » contient les fichiers nécessaires à la **compilation** (les fameux fichiers « .h » que l'on a évoqué tout à l'​heure ([[http://​packages.ubuntu.com/​cgi-bin/​search_contents.pl?​searchmode=filelist&​word=libfltk1.1-dev&​version=dapper&​arch=i38|voir ce paquet]]).+La bibliothèque « libfltk1.1-dev » contient les fichiers nécessaires à la **compilation** (les fameux fichiers « .h » que l'on a évoqué tout à l'​heure ([[https://​packages.ubuntu.com/​cgi-bin/​search_contents.pl?​searchmode=filelist&​word=libfltk1.1-dev&​version=dapper&​arch=i38|voir ce paquet]]).
  
 Pour chaque bibliothèque existante dans Ubuntu, il existe un paquet dont le nom finit par « -dev », qu'il est nécessaire d'​installer pour compiler les logiciels qui dépendent de cette bibliothèque. Pour chaque bibliothèque existante dans Ubuntu, il existe un paquet dont le nom finit par « -dev », qu'il est nécessaire d'​installer pour compiler les logiciels qui dépendent de cette bibliothèque.
Ligne 194: Ligne 200:
 ''​make''​ utilise le Makefile (qui lui est dans votre dossier source). ''​make''​ utilise le Makefile (qui lui est dans votre dossier source).
 « configure » crée le Makefile à partir d'un Makefile.in (que vous avez dans les sources). Tout ça est créé à partir d'un fichier assez simple qu'​écrit le développeur. « configure » crée le Makefile à partir d'un Makefile.in (que vous avez dans les sources). Tout ça est créé à partir d'un fichier assez simple qu'​écrit le développeur.
-Les //​autotools// ​sont un ensemble de scripts qui permettent ​de pouvoir gérer une procédure ​de configuration,​ compilation et installation très complexe ​à partir de quelques fichiers ​(relativementsimples.+Les //​autotools// ​ - ou "​outils de gestion automatisée"​ - forment ​un ensemble de scripts qui permettent ​la gestion des procédures ​de configuration,​ compilation et installation très complexes ​à partir de quelques fichiers ​relativement ​simples.
  
  
Ligne 203: Ligne 209:
  
 « make » peut être suivi d'un mot clé comme « install », « uninstall », « clean », « distclean ». Ça permet d'​appeler une fonction particulière du Makefile : « make » peut être suivi d'un mot clé comme « install », « uninstall », « clean », « distclean ». Ça permet d'​appeler une fonction particulière du Makefile :
 +  * « make install » permet d'​installer le programme ;
   * « make uninstall » permet de tout désinstaller ;   * « make uninstall » permet de tout désinstaller ;
-  * « make clean » nettoie les sources par exemple (en supprimant ​tout ce qui a été créé pendant la compilation+  * « make clean » supprime ​tout ce qui a été créé pendant la compilation ; 
-  * « make distclean » fait la même chose en supprimant en plus les Makefile, le code source reste. Cela redonne les sources comme on les eues après avoir décompressé l'​archive.+  * « make distclean » supprime aussi ce que « configure » généré.
  
 === apt-file === === apt-file ===
Ligne 228: Ligne 235:
   apt-file search libgthread-2.0   apt-file search libgthread-2.0
  
-Il se base sur le « sources.list ». +Il se base sur le « sources.list ».
    The contents packages are fetched from the location(s) specified in /​etc/​apt/​sources.list.    The contents packages are fetched from the location(s) specified in /​etc/​apt/​sources.list.
  
 ==== Les options de configuration ==== ==== Les options de configuration ====
  
-Si vous lancez : +Si
- +
-  ./configure --help +
- +
-Vous verrez tout ce que vous pouvez modifier comme options. Certains programmes ont de nombreuses options de compilation. +
 Par exemple ​ « ''​./​configure --prefix=/​usr''​ » installera les fichiers dans « /usr/ » au lieu de « /usr/local » (utilisé par défaut). ​ Par exemple ​ « ''​./​configure --prefix=/​usr''​ » installera les fichiers dans « /usr/ » au lieu de « /usr/local » (utilisé par défaut). ​
 Lancer « ''​./​configure --help''​ » avant la compilation est toujours une bonne idée. Lancer « ''​./​configure --help''​ » avant la compilation est toujours une bonne idée.
Ligne 247: Ligne 249:
  
   * Une [[tutoriel:​creer_un_paquet#​foire_aux_questions|foire aux questions]] est disponible.   * Une [[tutoriel:​creer_un_paquet#​foire_aux_questions|foire aux questions]] est disponible.
-  * Discussion [[http://​forum.ubuntu-fr.org/​viewtopic.php?​id=987|Désinstaller un programme compilé]] sur le forum ubuntu-fr+  * Discussion [[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=987|Désinstaller un programme compilé]] sur le forum ubuntu-fr
  
 ---- ----
  • tutoriel/compilation.1284086829.txt.gz
  • Dernière modification: Le 18/04/2011, 14:50
  • (modification externe)