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édentesRévision précédente
Prochaine révision
Révision précédente
tutoriel:compilation [Le 28/02/2015, 15:47] – [Les « autotools »] eagle08tutoriel:compilation [Le 23/11/2025, 10:09] (Version actuelle) – [Bibliothèques de développement] orthographe 31.10.154.44
Ligne 6: Ligne 6:
 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 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.
  
-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>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.</note> 
 + 
 +Cette documentation présente une méthode //généraliste// et //vulgarisée// pour compiler des programmes et des bibliothèques. 
 +<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.   - 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.
-  - 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 56: Ligne 59:
 === Pour les programmes déjà dans les dépôts, mais que vous voulez compiler pour avoir la dernière mise-à-jour === === Pour les programmes déjà dans les dépôts, mais que vous voulez compiler pour avoir la dernière mise-à-jour ===
  
-Une méthode très intéressante pour trouver les paquets utile à la compilation est la commande **apt-cache showsrc** (Les dépots source "deb-src" doivent être activés !!). Cette commande n'est valide que pour les logiciels déjà présents dans les dépôts (et que vous compilez pour profiter d'une mise-à-jour).+Une méthode très intéressante pour trouver les paquets utiles à la compilation est la commande **apt-cache showsrc** (Les dépots source "deb-src" doivent être activés !!). Cette commande n'est valide que pour les logiciels déjà présents dans les dépôts (et que vous compilez pour profiter d'une mise-à-jour).
  
 <code> <code>
Ligne 93: Ligne 96:
  
 Pour compiler un programme sans utiliser sudo rajouter l'utilisateur au groupe src. Pour compiler un programme sans utiliser sudo rajouter l'utilisateur au groupe src.
-<code>+<code bash>
 sudo usermod -aG src user 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> 
-<code bash>cd /chemin_vers_le_répertoire_des_sources +cd ''/chemin_vers_le_répertoire_des_sources'' 
-test -f configure || sh autogen.sh  +test -f configure || sh autogen.sh #facultatif 
-./configure  +./configure --enable-optimizations
 make make
-sudo checkinstall</code>+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 en utilisant la commande [[tutoriel/console_commandes_de_base#cd|cd]].   - 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 124: 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 130: 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 169: Ligne 186:
  
 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]]). 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 218: 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 237: 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
  
 ---- ----