[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: libpng*-dev et conflits



Bonjour,

On Sat, May 08, 2004 at 04:33:39PM +0200, JusTiCe8 wrote:
> Bonjour,
> 
> attention risque d'apparition d'un gros troll méchant pas beaux, j'aurai 
> prévenu ;).
> 

Pkoi un troll ? Ca me parait un trés bonne question, qui n'a pas de
raison de faire un troll.

> Je me demandais si quelqu'un parmi vous pouvez m'expliquer le pourquoi 
> du comment de la présence des différentes libpngx-dev (x= ,2,3), leur 
> utilité et la raison pour laquelle un paquet A utilise une version y 
> plutôt que z (avantages/inconvénients).
> 
> Aussi, et c'est la que c'est le plus embêtant, c'est que par un esprit 
> plus que tordu et, évidemment ;), par le plus grand des hasard, les libs 
> qt3 (kde) dépendent d'une version (libpng-dev) et les lib gtk (gnome) 
> d'une autre (libpng2-dev), ces 2 versions étant conflictuelles.
> 
> Pour ma part, je pense que c'est une abérration de voir une chose pareil 
> et c'est plus que saoûlant de devoir viré des libs de dev qt pour 
> compiler une appli gtk et vice-versa. Surtout que la solution du 
> chroot-ing me parait un peu lourde dans ce genre de cas.
> 

Ben en fait c'est trés simple, 

C'est une question d'API. Les API de libpngX et libpngY ( X != Y ) sont
incompatibles ( je ne parles pas des paquets de dev ). La c'est trés
simple, puisque le fichier qui contient ces API ( à savoir les .so )
portent la marque de la version ( .X ou .Y + dans le fichier ) et son
géré par ld.

Donc pour les librairies y a pas de pb.

En revanche, et c'est la que ca se corse, les API des fichiers header
sont aussi différents, mais peuvent ne pas l'être suffisament pour
empécher une compil ( ie généralement le cas quand une fonction initX()
faisait A + B et que pour des raisons quelconques elle fait plus que A
mais il faut faire B quand même à la main, ca se voit pas, mais ca fait
un SIGSEGV ). 

Et la, c'est rare que le fichiers headers porte la marque de leur version, 
ou plutot c'est compliqué qu'il porte la marque de leur version : 
- les fichiers headers sont souvent dans /usr/include/ ( png.h par ex )
- tous les progs qui utilisent un header l'utilisent explicitement ( ou
  presque ) #include <png.h>

Donc si les headers porté la marque de leur version, comme avec ld, ca
serait bien, mais il faudrait une certaines forme de gestion de la
version ( note ca existe, ca s'appelle pkgconfig, avec lequel tu fais
pkgconfig "gtk2.0 > 2.0.0" par exemple" ). La plupart des programmes
n'utilisant pas ce type de chose, ben on se trouve dans la nécessité
d'avoir recour à des libs exclusives ( parcequ'elles ont le meme fichier
header qu'elles installent au meme endroit ). 

Note : ce type de probleme peut se résoudre avec des bons
configure/config.h/Makefile... Mais pour penser à tous et faire des
programmes parfait c'est difficile.

Voila ma réponse -- peut etre fausse
Cordialement 
Sylvain Le Gall



Reply to: