Installation de la librairie GMP

Lorsque l’on développe des programmes en C, il est intéressant de savoir installer soi-même des librairies supplémentaires. Deux solutions sont possible. La première est de prendre la librairie qui a été déjà compilée par le gestionnaire du système d’exploitation. Pour la librairie GMP, voici quelques exemples de packages à installer :

  • debian: https://packages.debian.org/source/jessie/gmp
  • RPM: https://www.rpmfind.net/linux/rpm2html/search.php?query=gmp

Lors de l’installation d’une telle librairie, c’est souvent la package -dev qu’il faut installer pour avoir la librairie à linker et les fichiers .h.

Une meilleure solution est d’installer ces librairies manuellement depuis leurs sources. Voici un exemple sur MacOS.

Installation de GMP sur MacOS

La première étape est de charger la librairie. Celle-ci est fournie sous différents formats. Le format .tar.xz est directement supporté sur le Mac, les autres pas nécessairement.

# curl -o gmp.tar.xz https://gmplib.org/download/gmp/gmp-6.2.0.tar.xz
# tar xf gmp.tar.xz

La commande tar va extraire tous les fichiers de l’archive dans le répertoire gmp-6.2.0.

Ce répertoire contient de nombreux fichiers qui peuvent faire peur à première vue. Le premier réflexe est de regarder si il y a des fichiers texte de documentation.

# cd gmp-6.2.0/
# ls
AUTHORS			configure		missing
COPYING			configure.ac		mp_bpl.c
COPYING.LESSERv3	cxx			mp_clz_tab.c
COPYINGv2		demos			mp_dv_tab.c
COPYINGv3		doc			mp_get_fns.c
ChangeLog		errno.c			mp_minv_tab.c
INSTALL			extract-dbl.c		mp_set_fns.c
INSTALL.autoconf	gen-bases.c		mpf
Makefile.am		gen-fac.c		mpn
Makefile.in		gen-fib.c		mpq
NEWS			gen-jacobitab.c		mpz
README			gen-psqr.c		nextprime.c
acinclude.m4		gen-trialdivtab.c	primesieve.c
aclocal.m4		gmp-h.in		printf
asl.h			gmp-impl.h		rand
assert.c		gmp.pc.in		scanf
bootstrap.c		gmpxx.h			tal-debug.c
compat.c		gmpxx.pc.in		tal-notreent.c
compile			install-sh		tal-reent.c
config.guess		invalid.c		test-driver
config.in		longlong.h		tests
config.sub		ltmain.sh		tune
configfsf.guess		memory.c		version.c
configfsf.sub		mini-gmp		ylwrap

C’est bien le cas ici puisque le fichier INSTALL décrit comment installer cette librairie. Comme beaucoup de logiciels et de librairies, GMP utilise autoconf pour faciliter son installation.

L’installation d’un programme utilisant autoconf débute par l’exécution du script configure qui analyse de façon détaillée le système sur lequel celui-ci doit être installé. configure supporte de très nombreux paramètres. Vous pouvez en obtenir la liste en faisant ./configure --help.

Un des paramètres très utiles de configure est --prefix qui permet de spécifier le répertoire dans lequel la librairie doit être installée (par défaut ces librairies vont dans /usr/local/lib, les exécutables dans /usr/local/bin

A titre d’illustration, nous décidons d’installer gmp dans le répertoire ~/local, c’est-à-dire le sous-répertoire local dans le répertoire home de l’utilisateur courant.

# ./configure --prefix ~/local
checking build system type... haswell-apple-darwin18.7.0
checking host system type... haswell-apple-darwin18.7.0
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
...
configure: summary of build options:

  Version:           GNU MP 6.2.0
  Host type:         haswell-apple-darwin18.7.0
  ABI:               64
  Install prefix:    /Users/obo/local
  Compiler:          gcc
  Static libraries:  yes
  Shared libraries:  yes

Ensuite il suffit de taper make pour compiler l’entièreté de la librairie.

Comme il s’agit d’une librairie mathématique, il est important de vérifier que celle-ci fonctionne correctement en exécutant les tests fournis par les développeurs. C’est un rappel utile, si il en fallait encore, de l’importance des tests.

# make check

Il reste à installer les binaires générés dans ~/local avec

# make install
# ls -l ~/local/lib
total 3016
-rwxr-xr-x  1 obo  staff  553960 Apr  7 15:31 libgmp.10.dylib
-rw-r--r--  1 obo  staff  980464 Apr  7 15:31 libgmp.a
lrwxr-xr-x  1 obo  staff      15 Apr  7 15:31 libgmp.dylib -> libgmp.10.dylib
-rwxr-xr-x  1 obo  staff     912 Apr  7 15:31 libgmp.la
drwxr-xr-x  3 obo  staff      96 Apr  7 15:31 pkgconfig

La même procédure peut s’utiliser pour installer la librairie gmp sur différents versions de Linux.

Ecrit le April 7, 2020