Introduction
La librairie graphique libpng est utilisée par de nombreux produits comme
gnuplot ou encore PHP et JPgraph pour générer des images au format *.png
(Portable Network Graphics).
La compilation de la version 1.5.4 de la librairie libpng 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 .
La librairie libpng 1.5.4 est compilée avec la librairie de compression zlib
version 1.2.5 64 bits, version recommandée et optimale pour les performances et
la sécurité et afin de ne pas polluer les répertoires systèmes, la librairie
libpng 1.5.4 n’est installée dans son répertoire par défaut /usr/local
. Pour
plus d’informations sur l’installation de zlib 1.2.5 avec SunStudio 12.1 : zlib 1.2.5, compilation sur Sun Solaris 10 X86 en 64 bits.
Téléchargement et préparation de l’environnement
Téléchargement
libpng 1.5.4 est disponible en téléchargement sous la forme d’une archive
compressée (libpng-1.5.4.tar.gz
) à cette adresse : libpng 1.5.4 > Sourceforge Download.
L’archive compressée libpng-1.5.4.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 libpng-1.5.4.tar.gz | tar xvf -
Le code source est alors désarchivé avec la commande tar
dans le sous
répertoire ./libpng-1.5.4
.
Préparation de l’environnement pour la compilation de libpng 1.5.4 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
Dans le contexte de cette compilation, la version 1.2.3 de la librairie zlib
existe déjà dans les répertoires systèmes /usr
. Pour vérifier la version de
zlib déjà disponible sur la plateforme Sun Solaris 10 x86, consulter l’entête
du fichier zlib.h
situé dans le répertoire /usr/include
.
% cat /usr/include/zlib.h | more
...
#define ZLIB_VERSION "1.2.3"
...
La version zlib 1.2.5 64 bits, version recommandée pour libpng 1.5.4, est
installée dans le répertoire /Software/tools/misc
(pour plus d’informations sur
l’installation de zlib 1.2.5 avecSunStudio 12.1 : zlib 1.2.5, compilation sur Sun Solaris 10X86 en 64 bits .).
Les variables $CPPFLAGS
et $LDFLAGS
sont mises à jour
pour pointer sur la version 1.2.5 64 bits de zlib (fichiers d’entête *.h
et
librairies) :
% cd /Software/tools/temp/libpng-1.5.4
% CPPFLAGS="-I/Software/tools/misc/include $CPPFLAGS"
% export CPPFLAGS
% LDFLAGS="-L/Software/tools/misc/lib $LDFLAGS"
% export LDFLAGS
La variable $CPPFLAGS
pointe sur les fichiers zlib.h
et zconf.h
version
1.2.5 de la librairie zlib (/Software/tools/misc/include
).
La variable $LDFLAGS
pointe sur la librairie libz.so.1.2.5
de la librairie
zlib.
Configuration, compilation et installation
Une fois l’environnement préparé (variables $PATH, $CFLAGS, $CPPFLAGS,
$LDFLAGS
), 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/libpng-1.5.4 % ./configure --help
`configure' configures libpng 1.5.4 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
libpng 1.5.4 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/libpng-1.5.4
% ./configure --prefix=/Software/tools/misc
L’environnement étant bien préparé (variables $PATH, $CFLAGS, $CPPFLAGS,
$LDFLAGS
), la configuration se déroule sans problème.
La compilation et l’installation de libpng 1.5.4 sont réalisées avec les
commandes make
et make install
qui s’exécutent également sans problème.
% cd /Software/tools/temp/libpng-1.5.4
% make
% make test
% make install
La commande "make test
" permet de tester la librairie libpng sur plusieurs
aspects. Lors de ce test notamment, une image au format png, pngout.png, est
générée dans le répertoire courant :
% make test
Running tests. For details see pngtest-log.txt Running test-pngtest.sh PASS: test-pngtest.sh Running test-pngvalid-simple.sh PASS: pngvalid --standard PASS: pngvalid --standard --progressive-read PASS: pngvalid --standard --interlace PASS: pngvalid --standard --progressive-read --interlace PASS: pngvalid --size PASS: pngvalid --size --progressive-read PASS: pngvalid --transform PASS: test-pngvalid-simple.sh Running test-pngvalid-full.sh PASS: pngvalid --gamma-threshold PASS: pngvalid --gamma-transform PASS: pngvalid --gamma-sbit PASS: pngvalid --gamma-16-to-8 PASS: pngvalid --gamma-background PASS: pngvalid --gamma-alpha-mode PASS: pngvalid --gamma-transform --expand16 PASS: pngvalid --gamma-background --expand16 PASS: pngvalid --gamma-alpha-mode --expand16 PASS: test-pngvalid-full.sh ================== All 3 tests passed ==================
Le fichier de log pngtest-log.txt
confirme qu’il s’agit bien de la version
1.2.5 de zlib qui est utilisée :
% cd /Software/tools/temp/libpng-1.5.4
% cat pngtest-log.txt | more
============ pngtest pngtest.png ==============
Testing libpng version 1.5.4
with zlib version 1.2.5
...
Architecture de libpng
La compilation génère dans le répertoire DIR/lib
la librairie archive
statique libpng15.a
et la librairie dynamique libpng15.so.15.4.0
. Les liens
symboliques libpng.so
et libpng15.so
pointent sur la librairie
libpng15.so.15.4.0
.
Lors de l’utilisation de la librairie dynamique libpng.so
, l’environnement
($LD_LIBRARY_PATH
) doit montrer une dépendance avec la librairie libz.so
version 1.5.2. Cette dépendance peut être vérifiée avec la commande ldd
:
% cd /Software/tools/misc/lib % ldd libpng15.so
libz.so => ./libz.so libm.so.2 => /lib/64/libm.so.2 libc.so.1 => /lib/64/libc.so.1
3 fichiers d’entête png.h
,pngconf.h
et pnglibconf.h
sont générés dans le
répertoire DIR/include
. La version 1.5.4 est mentionnée dans le fichier
d’entête png.h
:
% cat /Software/tools/misc/include/png.h
#define PNG_LIBPNG_VER_STRING "1.5.4"
Ces fichiers d’entête devront être inclus lors de la compilation de produits qui en dépendent (PHP, gnuplot…).