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 ».
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.
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.
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 ...
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 et 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...).
| Version | Date | Commentaires |
|---|---|---|
| 1.0 | 07/2011 | Version initiale |
libpng : Home Page
SQLPAC : zlib 1.2.5,
compilation sur Sun Solaris 10 X86 en 64 bits
SQLPAC : Installation de Sun
Studio 12 sur Sun Solaris 10 X86 pour les compilations