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 15/05/2007, 08:09] – Ajouté une 3ieme méthode pour retrouver les bibliothèques manquantes (apt-get build-dep) 89.173.135.197 | projets:paquets:compiler_un_programme [Le 14/07/2009, 19:36] (Version actuelle) – Supprimée, fusion avec /tutoriel/compilation johndescs | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> | ||
| - | ---- | ||
| - | |||
| - | ^ Séance ^ Date ^ Cours dispensé par ^ Lieu ^ Rédacteur ^ | ||
| - | | 2 | 30/09/2006 | [[utilisateurs: | ||
| - | |||
| - | ====== 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 « sources.list » (dépôts commençant par « deb-src », voir [[: | ||
| - | * L' | ||
| - | |||
| - | ===== Présentation des sources ===== | ||
| - | |||
| - | Commençons par regarder un [[http:// | ||
| - | Les trois lignes commençant par « ''# | ||
| - | * " | ||
| - | * < | ||
| - | |||
| - | 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 « 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' | ||
| - | |||
| - | 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' | ||
| - | La bibliothèque « libfltk1.1 » contient les fichiers nécessaires à **l' | ||
| - | La bibliothèque « 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 // | ||
| - | |||
| - | apt-get source epdfview | ||
| - | |||
| - | Vous allez trouver un « .orig.tar.gz », qui est en fait le « .tar.gz » d' | ||
| - | |||
| - | Un dossier « epdfview-< | ||
| - | |||
| - | 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 soi 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 : < | ||
| - | - pour installer (nécessite les droits d' | ||
| - | |||
| - | |||
| - | |||
| - | ==== Retrouver les bibliothèques manquantes ==== | ||
| - | |||
| - | Il y a trois méthodes pour retrouver les bibliothèques manquantes : | ||
| - | * selon les dépendances dur paquet ; | ||
| - | * selon les erreurs de « ./configure » ; | ||
| - | * selon le fichier « configure.ac ». | ||
| - | ===Les dépendances du paquet === | ||
| - | |||
| - | Tout paquet Debian/ | ||
| - | |||
| - | sudo apt-get build-dep epdfview | ||
| - | |||
| - | Va s' | ||
| - | |||
| - | ===Les erreurs de « ./configure » === | ||
| - | |||
| - | Si les dépendances ne sont pas installées, | ||
| - | 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 : | ||
| - | |||
| - | libgtk2.0-dev - Development files for the GTK+ library | ||
| - | |||
| - | Le paquet manquant était : **libgtk2.0-dev**. | ||
| - | [[: | ||
| - | |||
| - | |||
| - | ===Le fichier « configure.ac »=== | ||
| - | |||
| - | Pour trouver les dépendances, | ||
| - | |||
| - | [[: | ||
| - | 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 « gthread » peut être trouvé de 2 façons : | ||
| - | * 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 « libgtk2.0-dev », « libpoppler-glib-dev » et « libglib2.0-dev »), les sources peuvent être compilées (c' | ||
| - | |||
| - | make | ||
| - | |||
| - | === Installation === | ||
| - | |||
| - | On va installer les fichiers avec : | ||
| - | |||
| - | sudo make install | ||
| - | |||
| - | Ça 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 // | ||
| - | |||
| - | '' | ||
| - | '' | ||
| - | 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 === | ||
| - | |||
| - | « make » peut être suivi d'un mot clé comme « install », « uninstall », « clean », « distclean ». Ça permet d' | ||
| - | * « 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 distclean » fait la même chose en supprimant en plus les Makefile, le code source reste. Cela redonne les sources comme on les a eues après avoir décompressé l' | ||
| - | |||
| - | === apt-file === | ||
| - | |||
| - | [[: | ||
| - | 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 : | ||
| - | |||
| - | apt-file search libgthread-2.0 | ||
| - | |||
| - | 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 search gtk/gtk.h | ||
| - | |||
| - | |||
| - | ===== Ressources ===== | ||
| - | |||
| - | * Une [[tutoriel: | ||
| - | |||
| - | ---- | ||
