Outils pour utilisateurs

Outils du site


projets:systemesreseaux:compilesource

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
projets:systemesreseaux:compilesource [2014/01/18 08:56]
christian.jacolot [Compilation d'une application binaire à partir des sources]
projets:systemesreseaux:compilesource [2016/07/19 15:36] (Version actuelle)
Ligne 1: Ligne 1:
 +====== Création d'un binaire à partir des fichiers sources ======
 +
 +===== Prérequis pour la compilation des sources =====
 +
 +Pour compiler les sources d'une application,​ il vous faut les paquets Debian suivants:
 +
 +  * gcc <​code>#​ apt-get install gcc</​code>​
 +  * wget <​code>#​ apt-get install wget</​code>​
 +
 +===== Compilation d'une application binaire à partir des sources =====
 +
 +Le but est de construire un fichier binaire exécutable (ou plusieurs suivant les applications) à partir des fichiers sources d'une application.
 +L'​exemple qui sera utilisé se trouve sur le site gnu.org. Il s'agit du fameux exemple ''​Hello World'':​
 +<​code>​
 +$ wget http://​ftp.gnu.org/​gnu/​hello/​hello-2.9.tar.gz
 +</​code>​
 +Pour en savoir plus sur cette application,​ vous pouvez consulter les liens suivants:
 +  * [[http://​www.gnu.org/​software/​hello/​|Hello - GNU Project]] et
 +  * [[http://​www.gnu.org/​software/​hello/​manual/​hello.html|son manuel]].
 +
 +Dans un premier temps, il faut extraire les fichiers de l'​archive:​
 +<​code>​
 +$ tar xf hello-2.9.tar.gz
 +</​code>​
 +
 +Un répertoire ''​hello-2.9''​ a été créé, rendez-vous dans ce répertoire:​
 +<​code>​
 +$ cd hello-2.9
 +</​code>​
 +
 +Vous pouvez examiner les fichiers du répertoire,​ et vous rendre compte qu'il s'agit d'un parfait exemple d'​application GNU qui respecte:
 +  * [[http://​www.gnu.org/​prep/​standards/​|les règles de codage d'​application GNU]] et
 +  * [[http://​www.gnu.org/​prep/​maintain/​|les informations pour la maintenance]].
 +
 +Cette application utilise les [[http://​fr.wikipedia.org/​wiki/​Autotools|''​autotools''​]] pour analyser l'​environnement et permettre de créer le fichier binaire exécutable pour différents plates-formes unix (portabilité).
 +
 +Le processus de compilation est décrit dans le schéma suivant:
 +[[http://​commons.wikimedia.org/​wiki/​File:​Autoconf-automake-process-fr.svg|autotools]].
 +
 +Le processus est généralement le même pour toutes les applications construites autour de ces outils. Mais néanmoins, dans le doute, vous pouvez consulter dans l'​archive de l'​application source, les fichiers suivants qui précisent ou rappellent souvent la démarche de compilation et d'​installation de l'​application:​
 +  * README
 +  * INSTALL
 +
 +Pour commencer, analyse de l'​environnement:​
 +<​code>​
 +$ sh configure ​ # ou ./configure (le fichier est exécutable)
 +</​code>​
 +S'il n'y a pas d'​erreurs,​ c'est que la configuration minimum obligatoire pour l'​application a été trouvée. Cependant suivant l'​application,​ des fonctionnalités sont souvent disponibles en option, suivant vos besoins, il faudra préciser à ''​configure''​ ces options. Il existe plusieurs types d'​options,​ dont les options:
 +  * d'​installation,​ dans quels répertoires vont se trouver les fichiers sur le système, lors de la phase d'​installation,​ option ''​--prefix'',​
 +  * de compilation,​ lors de la compilation,​ des modules de l'​application peuvent être activés (i.e compilés et intégrés à l'​exécutable final) ou désactivés,​ options: --disable-<​module>​ et --enable-<​module>​.
 +
 +Pour voir certaines de ces options:
 +<​code>​
 +$ ./configure -h # ou --help
 +</​code>​
 +
 +Après la configuration,​ de nombreux fichiers ont été créés dont le fichier [[http://​fr.wikipedia.org/​wiki/​Makefile|''​Makefile''​]] qui est la base, entres autres, pour compiler les sources et obtenir un exécutable.
 +
 +Pour procéder à la compilation et à la création des artefacts de l'​application:​
 +<​code>​
 +$ make
 +</​code>​
 +
 +Par défaut, le **make** cherche dans le fichier ''​Makefile'',​ la première cible, et par convention, souvent représentée par ''​all:'',​ c'est à partir de là que tout s'​enchaîne.
 +
 +Pour en apprendre plus sur [[http://​fr.wikipedia.org/​wiki/​GNU_make|Make]],​ vous pouvez consulter le [[http://​www.gnu.org/​software/​make/​manual/​make.html|manuel]],​ ou utiliser le ''​man''​ ou l'aide en ligne:
 +<​code>​
 +$ make -h
 +</​code>​
 +
 +Ce qui nous donne quelques options intéressantes:​
 +  * **-f** pour fournir un autre fichier ''​Makefile''​ que celui qu'il va chercher par défaut avec le nom sus-cité,
 +  * **-j** pour faciliter la compilation en mode tâches simultanées,​
 +  * **-n** afficher toutes les commandes de ce processus de compilation sans les exécuter (mode simulation).
 +
 +Pour fournir et installer le binaires et les fichiers associés au bon fonctionnement de l'​application,​ il suffit de changer de cible pour make en tant qu'​administrateur:​
 +<​code>​
 +# make install # ou $ sudo make install
 +</​code>​
 +
 +Une fois installée, vous pouvez apprécier l'​application,​ en lançant le binaire:
 +<​code>​
 +$ hello
 +</​code>​
 +
 +L'​application est livrée avec des options, pour en savoir plus:
 +<​code>​
 +$ hello -h
 +</​code>​
 +
 +Comme l'​exemple hello est bien fait, il est aussi possible de désinstaller l'​exécutable et les fichiers associés du système:
 +<​code>​
 +# make uninstall # ou $ sudo make uninstall
 +</​code>​
 +Il est bien entendu, que ceci se fait à partir du répertoire où se trouvent les sources de l'​application.
 +
 +Par contre le binaire est toujours disponible dans l'​arborescence des sources, il
 +est situé dans le répertoire ''​src'':​
 +<​code>​
 +$ cd src
 +$ ./hello
 +</​code>​
 +
 +Pour enlever ce fichier de l'​arborescence des sources et tous les fichiers produits pendant le processus de compilation,​ il suffit d'​appeler ''​make''​ avec la cible ''​clean'':​
 +<​code>​
 +$ make clean
 +</​code>​
 +
 +Pour nettoyer en profondeur, c'est à dire enlever les fichiers de la configuration,​ il faut appeler une autre cible (non pas celle [[http://​fr.wikipedia.org/​wiki/​Monsieur_Propre|là]]):​
 +<​code>​
 +$ make distclean
 +</​code>​
 +et du coup, il faut refaire la configuration et la compilation depuis le début, si on veut avoir le binaire.
 +
 +===== Compilation:​ alternative =====
 +
 +Il existe d'​autres façons de configurer l'​environnement avant de lancer le processus de compilation,​ on peut le faire:
 +  * à la main ou avec les pieds.
 +  * utiliser un système alternatif.
 +
 +Parmi les systèmes alternatifs,​ il existe [[http://​fr.wikipedia.org/​wiki/​Cmake|CMake]]. Il est prévu pour être multi-environnement (Unix, mais aussi les autres, pour ne pas les citer (__Et il les a cité...__)).
 +
 +Pour illustrer CMake, nous allons télécharger les sources de MySQL:
 +<​code>​
 +$ wget http://​dev.mysql.com/​get/​Downloads/​MySQL-5.6/​mysql-5.6.15.tar.gz
 +</​code>​
 +MySQL utilise CMake. Et justement pour utiliser CMake, il faut installer les paquets Debian suivants:
 +<​code>​
 +$ sudo apt-get install cmake
 +</​code>​
 +
 +Installer l'​archive:​
 +<​code>​
 +$ tar xf mysql-5.6.15.tar.gz
 +$ cd mysql-5.6.15
 +</​code>​
 +
 +Explorez l'​arborescence des sources, notez l'​absence de ''​configure''​.
 +Démarrer la configuration:​
 +<​code>​
 +$ cmake .
 +</​code>​
 +
 +S'il n'y a pas d'​erreur,​ on peut voir apparaître dans le répertoire le fichier ''​Makefile''​ qui servira ensuite pour la compilation que je vous laisse en exercice, car il est identique à ce qui a été vu au-dessus.
 +
 +Avec CMake, il est possible de voir toutes les options disponibles lors de la configuration de l'​application:​
 +<​code>​
 +$ cmake . -L # ou cmake . -LH ou cmake . -LAH
 +</​code>​
 +
 +Enfin il existe aussi une version en interface utilisateur en mode texte:
 +<​code>​
 +$ sudo apt-get install cmake-curses-gui
 +$ ccmake .
 +</​code>​
 +
 +Voici le résultat dans la capture d'​écran ci-dessous:
 +{{ :​projets:​systemesreseaux:​compilesource_ccmake.png?​200 |}}