Compilation de GNU Readline sur Sun Solaris 10 X86

Logo

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…).