Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| projets:paquets:compiler_un_programme [Le 17/12/2006, 15:53] – redirection vers nouvelle version de page Blackpegaz | projets:paquets:compiler_un_programme [Le 14/07/2009, 19:36] (Version actuelle) – Supprimée, fusion avec /tutoriel/compilation johndescs | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | Version Dapper | ||
| - | Rédigé par [[utilisateurs: | ||
| - | |||
| - | Une [[projets: | ||
| - | |||
| - | ====== Compiler un programme | ||
| - | |||
| - | La compilation des sources d'un programme est rarement compliquée. En général quelques commandes suffisent pour compiler et installer un logiciel. Le plus pénible est certainement de trouver et d' | ||
| - | On va surtout s' | ||
| - | Ce petit topo a pour objectif de fournir des outils et des astuces pour trouver les dépendances. | ||
| - | |||
| - | ==== Pré-requis ==== | ||
| - | * Il faut activer les dépôts source dans votre '' | ||
| - | |||
| - | * L' | ||
| - | |||
| - | sudo apt-get install build-essential | ||
| - | |||
| - | ===== Présentation des sources ===== | ||
| - | Commençons par regarder un bout de code source en C : | ||
| - | http:// | ||
| - | Les trois lignes commençant par "# | ||
| - | * mousepad.h (écrit entre guillemets doubles) est un fichier fourni avec les sources du logiciel ; | ||
| - | * gtk/gtk.h et glib.h (écrits entre < et >) sont des fichiers qui doivent être présents sur le système lors de la compilation. | ||
| - | |||
| - | Ces fichiers sont de manière générale installés dans / | ||
| - | |||
| - | ==== Les bibliothèques ==== | ||
| - | Les fichiers appelés par les programmes en C sont des parties de bibliothèques (traduction de " | ||
| - | |||
| - | Chez Ubuntu (comme sur toutes les distributions basées sur debian), les bibliothèques sont dispatchées dans plusieurs paquets (2 au minimum). Prenons l' | ||
| - | libfltk1.1 contient les fichiers nécessaires à __l' | ||
| - | libfltk1.1-dev contient les fichiers nécessaires à la __compilation__ (les fameux fichiers .h que l'on a évoqué tout à l' | ||
| - | |||
| - | Pour chaque bibliothèque existante dans Ubuntu, il existe un paquet dont le nom finit par -dev, qu'il est nécessaire d' | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ===== Exemple pratique : compilation d' | ||
| - | |||
| - | Ouvrez un terminal, et créez un dossier ~/source : | ||
| - | mkdir ~/sources && cd ~/sources | ||
| - | |||
| - | On va compiler epdfview dont on va récupérer les sources dans les dépôts avec : | ||
| - | apt-get source epdfview | ||
| - | |||
| - | Vous allez trouver un .orig.tar.gz, | ||
| - | |||
| - | Un dossier '' | ||
| - | cd epdfview-< | ||
| - | |||
| - | Si ce dossier n'est pas présent, décompressez l' | ||
| - | tar zxvf epdfview*.orig.tar.gz && cd epdfview-< | ||
| - | |||
| - | Regardons alors ce qu'il y a dans ce dossier avec : | ||
| - | ls | ||
| - | |||
| - | Les sources en soit sont incluses dans le dossier src/ . | ||
| - | Le dossier po/ contient les traductions et vous avez tout un tas de fichiers qui vont servir à la compilation. Peu importe leur contenu, la plupart sont des scripts de plusieurs milliers de lignes permettant à l' | ||
| - | |||
| - | |||
| - | Compiler et installer se fait tout simplement en exécutant : | ||
| - | |||
| - | - pour configurer : | ||
| - | ./ | ||
| - | - pour compiler : | ||
| - | make | ||
| - | - pour installer (nécessite les droits root) | ||
| - | sudo make install | ||
| - | |||
| - | |||
| - | ==== Retrouver les bibliothèques manquantes ==== | ||
| - | |||
| - | Il y a deux méthodes pour retrouver les bibliothèques manquantes: | ||
| - | * selon les erreurs de ' | ||
| - | * selon le fichier ' | ||
| - | |||
| - | ===les erreurs de ' | ||
| - | |||
| - | Si les dépendances ne sont pas installées, | ||
| - | pas jusqu' | ||
| - | Cela peut être le cas ici, prenons l' | ||
| - | On nous indique alors : | ||
| - | No package ' | ||
| - | |||
| - | On sait que l'on cherche un paquet -dev puisque seuls les paquets -dev sont aptes à la compilation. Donc on va utiliser la commande: | ||
| - | | ||
| - | |||
| - | L' | ||
| - | |||
| - | Il y a beaucoup de résultat pour pouvoir choisir le bon paquet. | ||
| - | Mais on sait que l'on recherche une dépendance bibliothèque, | ||
| - | | ||
| - | |||
| - | Enfin, dernier indice, c'est que c'est gtk 2 que l'on recherche, donc : | ||
| - | On lance la recherche avec | ||
| - | | ||
| - | |||
| - | Ce qui nous donne le résultat : | ||
| - | '' | ||
| - | |||
| - | Le paquet manquant était : **libgtk2.0-dev** | ||
| - | On installe donc ce paquet avec [[: | ||
| - | |||
| - | |||
| - | ===le fichier configure.ac=== | ||
| - | |||
| - | Pour trouver les dépendances on a utilisé les erreurs de ./ | ||
| - | |||
| - | Ouvrez le fichier configure.ac avec un éditeur de texte | ||
| - | gedit configure.ac | ||
| - | ou | ||
| - | kate configure.ac | ||
| - | |||
| - | vous allez trouver ces lignes (non successives) : | ||
| - | PKG_CHECK_MODULES([GLIB], | ||
| - | PKG_CHECK_MODULES([GTK2], | ||
| - | PKG_CHECK_MODULES([POPPLER], | ||
| - | Et on a ici les dépendances requises :) | ||
| - | |||
| - | On peut ensuite utiliser la technique de tout à l' | ||
| - | |||
| - | le paquet contenant ' | ||
| - | * le fichier configure.ac sous-entend que ce gthread est contenu dans la bibliothèque glib, on recherche donc avec '' | ||
| - | * on peut également utiliser ' | ||
| - | |||
| - | Lors de l' | ||
| - | |||
| - | === Compilation === | ||
| - | Une fois toutes les dépendances trouvées et installées grâce à apt ou équivalent (dans notre cas '' | ||
| - | make | ||
| - | |||
| - | === Installation === | ||
| - | On va installer les fichiers avec : | ||
| - | sudo make install | ||
| - | |||
| - | Ca va installer les fichiers nécessaires (l' | ||
| - | |||
| - | Et voici le résultat: | ||
| - | david@Xarpoon: | ||
| - | |||
| - | Vous pouvez tester en lançant '' | ||
| - | |||
| - | =====Quelques commandes, quelques astuces, et quelques explications===== | ||
| - | |||
| - | ==== Les autotools ==== | ||
| - | |||
| - | En fait des autotools créent le fichier '' | ||
| - | |||
| - | '' | ||
| - | '' | ||
| - | Les ./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' | ||
| - | Les " | ||
| - | |||
| - | |||
| - | ==== Quelques commandes ==== | ||
| - | |||
| - | === ' | ||
| - | |||
| - | '' | ||
| - | * 'make uninstall' | ||
| - | * 'make clean' nettoie les sources par exemple (en supprimant tout ce qui a été créé pendant la compilation) ; | ||
| - | * 'make distclean' | ||
| - | |||
| - | === ' | ||
| - | |||
| - | [[applications: | ||
| - | Pour l' | ||
| - | sudo apt-get install apt-file | ||
| - | On l' | ||
| - | sudo apt-file update | ||
| - | |||
| - | Dans notre exemple de tout à l' | ||
| - | apt-file search libgthread | ||
| - | |||
| - | Le paquet recherché est donc soit libglib2.0-dev soit libglib1.2-dev. | ||
| - | |||
| - | On peut préciser la recherche avec '' | ||
| - | |||
| - | Il se base sur le sources.list. | ||
| - | The contents packages are fetched from the location(s) specified in / | ||
| - | |||
| - | ==== Les options de configuration ==== | ||
| - | |||
| - | Si vous lancez : | ||
| - | ./configure --help | ||
| - | Vous verrez tout ce que vous pouvez modifier comme options. Certains programmes ont de nombreuses options de compilation. | ||
| - | |||
| - | Par exemple | ||
| - | Lancer `./ | ||
| - | |||
| - | === Un problème courant === | ||
| - | Il arrive que les ./configure soient mal faits, et une erreur du type : | ||
| - | gtk/gtk.h: cannot find the file | ||
| - | peut survenir lors de la compilation. C'est apt-file qui sera votre plus sûr allié dans un tel cas : | ||
| - | apt-file search gtk/gtk.h | ||
