Outils pour utilisateurs

Outils du site


projets:systemesreseaux:compilesource

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
    # apt-get install gcc
  • wget
    # apt-get install wget

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:

$ wget http://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz

Pour en savoir plus sur cette application, vous pouvez consulter les liens suivants:

Dans un premier temps, il faut extraire les fichiers de l'archive:

$ tar xf hello-2.9.tar.gz

Un répertoire hello-2.9 a été créé, rendez-vous dans ce répertoire:

$ cd hello-2.9

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:

Cette application utilise les ''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: 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:

$ sh configure  # ou ./configure (le fichier est exécutable)

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:

$ ./configure -h # ou --help

Après la configuration, de nombreux fichiers ont été créés dont le fichier ''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:

$ make

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 Make, vous pouvez consulter le manuel, ou utiliser le man ou l'aide en ligne:

$ make -h

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:

# make install # ou $ sudo make install

Une fois installée, vous pouvez apprécier l'application, en lançant le binaire:

$ hello

L'application est livrée avec des options, pour en savoir plus:

$ hello -h

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:

# make uninstall # ou $ sudo make uninstall

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:

$ cd src
$ ./hello

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:

$ make clean

Pour nettoyer en profondeur, c'est à dire enlever les fichiers de la configuration, il faut appeler une autre cible (non pas celle ):

$ make distclean

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 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:

$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz

MySQL utilise CMake. Et justement pour utiliser CMake, il faut installer les paquets Debian suivants:

$ sudo apt-get install cmake

Installer l'archive:

$ tar xf mysql-5.6.15.tar.gz
$ cd mysql-5.6.15

Explorez l'arborescence des sources, notez l'absence de configure. Démarrer la configuration:

$ cmake .

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:

$ cmake . -L # ou cmake . -LH ou cmake . -LAH

Enfin il existe aussi une version en interface utilisateur en mode texte:

$ sudo apt-get install cmake-curses-gui
$ ccmake .

Voici le résultat dans la capture d'écran ci-dessous:

projets/systemesreseaux/compilesource.txt · Dernière modification : 2024/04/16 22:26 de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki