Introduction
Les librairies readline sont utilisées par de nombreux produits, qu’il s’agisse de langages ou de bases de données, parmi ces produits :
- PostgreSQL
- Python
- sqsh
- et bien d’autres encore…
Cet article présente la compilation des librairies readline 6.2 en 64 bits sur une plateforme Solaris 10 X86 avec la solution SunStudio 12.1.
Téléchargement
La librairie readline 6.2 est disponible en téléchargement sous la forme
d’une archive compressée (readline-6.2.tar.gz
) à cette adresse : The Gnu Readline Library - Home Page
.
L’archive readline-6.2.tar.gz
est envoyée avec ftp sur la machine cible dans
le répertoire /Software/tools/temp
puis décompressée avec l’utilitaire
gunzip
% cd /Software/tools/temp
% gunzip readline-6.2.tar.gz
Le code source est alors désarchivé avec la commande tar
dans le sous
répertoire ./readline-6.2
:
% cd /Software/tools/temp
% tar xvf readline-6.2.tar
Compilation de readline 6.2
La compilation est réalisée avec SunStudio 12 pour Solaris X86 (Installation de Sun Studio 12 sur Sun Solaris X86 pour les compilations).
L’installation des librairies readline est réalisée par défaut dans le
répertoire /usr/local/lib
:
/usr/local/lib
/usr/local/include
/usr/local/share
/usr/local/bin
Dans le contexte de cet article, afin de ne pas polluer les répertoires
systèmes /usr
, l’installation des librairies readline est réalisée dans le
répertoire /Software/tools/misc
au lieu du répertoire par défaut /usr/local
.
Préparation de l’environnement pour la compilation de readline avec SunStudio en 64 bits
La variable d’environnement $PATH
est mise à jour avant la compilation pour
référencer /usr/ccs/bin
, répertoire qui contient le binaire ld
indispensable
pour la génération des liens.
% PATH=/usr/ccs/bin:$PATH
% export PATH
Si les liens de SunStudio n’ont pas été installés dans /usr/bin
lors de
l’installation, la variable $PATH
doit référencer également le répertoire
<répertoire de sunstudio 12.1>/bin
pour trouver les compilateurs (cc
…).
% PATH=/opt/sunstudio12.1/bin:$PATH
% export PATH
Comme il s’agit d’une compilation en 64 bits, la variable d’environnement
$CFLAGS
est créée et mise à jour à -m64
:
% CFLAGS=-m64
% export CFLAGS
Configuration de la compilation
Une fois l’environnement préparé (variables $PATH, $CFLAGS
), la
configuration de la compilation peut être déclenchée. L’option --help
renvoie
les options de configuration (la sortie de l’option --help
est allégée pour la
lisibilité).
% cd /Software/tools/temp/readline-6.2 % ./configure --help
`configure' configures readline 6.2 to adapt to many kinds of systems. ... Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/bin', `/usr/local/lib' etc. You can specify an installation prefix other than `/usr/local' using `--prefix', for instance `--prefix=$HOME'. ...
Ici, seule l’option --prefix
est spécifiée dans la configuration afin de
délocaliser l’installation des librairies readline dans le répertoire
/Software/tools/misc
% ./configure --prefix=/Software/tools/misc
La configuration de la compilation n’a pas posé de problème particulier ici.
Compilation et installation
La compilation et l’installation de readline 6.2 sont réalisées avec les
commandes make
et make install
% cd /Software/tools/temp/readline-6.2
% make
% make install
À l’issue de l’installation, le message ci-dessous peut apparaître :
install: you may need to run ldconfig
Il ne s’agit absolument pas d’une erreur. Ce message précise qu’il sera
probablement nécessaire d’ajouter le chemin d’accès aux librairies readline
dans la variable $LD_LIBRARY_PATH
pour pouvoir utiliser celles-ci.
% export LD_LIBRARY_PATH=/Software/tools/misc/lib:$LD_LIBRARY_PATH
À propos de ce message, l’utilitaire ldconfig
n’existe pas sur les OS
Solaris, il s’agit de crle
(configure runtime linking environment) pour
prédifinir les chemins d’accès aux librairies sous Solaris.
Vérification de la compilation
Dans la suite de cet article, $REPDIR_READLINE
correspond au répertoire
d’installation de readline 6.2 (/Software/tools/misc
). À la fin de la
compilation, l’arborescence créée pour readline 6.2 est la suivante :
$REPDIR_READLINE/lib
$REPDIR_READLINE/include/readline
$REPDIR_READLINE/share/readline
Le répertoire $REPDIR_READLINE/lib
contient la librairie readline
libreadline.so.6
et l’archive ar libreadline.a
pour les compilations des
produits dépendants de readline. Un lien symbolique libreadline.so
pointe sur
libreadline.so.6
pour s’affranchir de la version majeure de readline.
% cd /Software/tools/misc/lib % ls -ll
libreadline.so -> libreadline.so.6 libreadline.so.6 libreadline.a
La commande file
précise bien qu’il s’agit d’une librairie 64 bits :
% file libreadline.so.6
libreadline.so.6: ELF 64-bit LSB dynamic lib AMD64 Version 1 [SSE2], dynamically linked, not stripped
Le répertoire $REPDIR_READLINE/include/readline
contient quant à lui tous
les fichiers d’entête *.h
(headers) pour la librairie readline. Ce répertoire
devra être inclus dans les options de compilation de produits dépendants
(PostgreSQL, sqsh, Python…).