Introduction
La librairie graphique libjpeg est utilisée par de nombreux produits comme
gnuplot ou encore PHP et JPgraph pour générer des images au format *.jpg
,
*.jpeg
(Joint Photographic Experts Group).
La compilation de la version 8c (8.3.0) de la librairie libjpeg en 64 bits avec SunStudio 12.1 sur une plateforme Solaris 10 x86 64 bits est présentée dans cet article. Pour plus d’informations sur l’installation des compilateurs SunStudio 12.1 : Installation de Sun Studio 12 sur Sun Solaris 10 X86 pour les compilations.
Téléchargement et préparation de l’environnement
Téléchargement
libjpeg 8c est disponible en téléchargement sous la forme d’une archive
compressée (jpegsrc.v8c.tar.gz
) à cette adresse : libjpeg 8c > ijg.org Download.
L’archive compressée jpegsrc.v8c.tar.gz
est transférée avec ftp
sur la
machine cible dans le répertoire /Software/tools/temp
puis décompressée et
désarchivée avec les utilitaires gunzip
et tar
:
% cd /Software/tools/temp
% gunzip -c jpegsrc.v8c.tar.gz | tar xvf -
Le code source est alors désarchivé avec la commande tar
dans le sous
répertoire ./jpec-8c
.
Préparation de l’environnement pour la compilation de libjpeg 8c (8.3.0) avec SunStudio 64 bits
La variable $PATH
est mise à jour avant la compilation pour référencer
/usr/ccs/bin
, répertoire qui contient les binaire ld
et ar
, indispensables pour
la génération des librairies dynamiques et archives.
% 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.
% 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, compilation et installation
Une fois l’environnement préparé (variables $PATH, $CFLAGS
), la
configuration de la compilation peut être déclenchée avec le script
configure
.
L’option --help
renvoie les options de configuration (la sortie de l’option
--help
est allégée pour la lisibilité, seules les options qui nous intéressent
sont consignées).
% cd /Software/tools/temp/jpec-8c % ./configure --help
`configure' configures libjpeg 8.3.0 to adapt to many kinds of systems. Usage: ./configure [OPTION]... [VAR=VALUE]... ... 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'. ...
L’option --prefix
est spécifiée ici afin de délocaliser l’installation de
libjpeg 8c en dehors des répertoires systèmes /usr
. L’installation est réalisée
dans le répertoire /Software/tools/misc
: --prefix=/Software/tools/misc
(DIR).
La ligne de configuration de la compilation est donc la suivante dans cet exemple pratique :
% cd /Software/tools/temp/jpec-8c
% ./configure --prefix=/Software/tools/misc
L’environnement étant bien préparé (variables$PATH, $CFLAGS
), la
configuration se déroule sans problème.
La compilation et l’installation de libjpeg 8c sont réalisées avec les
commandes make
et make install
qui s’exécutent également sans problème.
% cd /Software/tools/temp/jpec-8c
% make
% make test
% make install
La commande "make test
" permet de tester la librairie libjpeg. Lors de ces
tests, les divers exécutables, djpeg, cjpeg
et jpegtran
, sont testés dans la
génération et le traitement des images *.jpg
:
% make test
... ./djpeg -dct int -ppm -outfile testout.ppm ./testorig.jpg ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp ./testorig.jpg ./cjpeg -dct int -outfile testout.jpg ./testimg.ppm ./djpeg -dct int -ppm -outfile testoutp.ppm ./testprog.jpg ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg ./testimg.ppm ./jpegtran -outfile testoutt.jpg ./testprog.jpg ...
Architecture de libjpeg 8c
La compilation génère dans le répertoire DIR/lib
la librairie archive
statique libjpeg.a
et la librairie dynamique libjpeg.so.8.3.0
. Les liens
symboliques libjpeg.so
et libjpeg.so.8
pointent sur la librairie
libjpeg.so.8.3.0
.
3 exécutables sont générés dans le répertoire DIR/bin
:
cjpeg
: exécutable qui compresse au format jpg des images PPM, BMP, PGM et RLE.djpeg
: exécutable qui décompresse une image jpg dans les formats PPM, BMP, GIF, PGM, RLE ou Targa.jpegtran
: exécutable qui optimise et transforme des images jpg (rotation, optimisation, encodage, conversion en niveaux de gris…).
4 fichiers d’entête jconfig.h, jerror.h, jmorecfg.h
et jpeglib.h
sont
générés dans le répertoire DIR/include
. Le fichier d’entête jpeglib.h
est le
fichier d’entête principal dans lequel la version 8.3.0 est mentionnée :
% cat /Software/tools/misc/include/jpeglib.h
... #define JPEG_LIB_VERSION 80 /* Compatibility version 8.0 */ #define JPEG_LIB_VERSION_MAJOR 8 #define JPEG_LIB_VERSION_MINOR 3 ...
Ces fichiers d’entête devront être inclus lors de la compilation de produits qui en dépendent (PHP, gnuplot…).