On Thu, 2002-02-14 at 20:44, Titus wrote:
> Bonjour a tous les guildiens.
Bonjour
> Voila, je cherche a faire tourner une appli sur ma debian stable et
> l'appli en question me reclame la "libstdc++2.10-glibc2.2_2.95.4-2".
> Je rechigne un peu a compromettre une stabilite jamais mise en
> defaut en rajoutant un ( voire plus suivant dependances ... ) composant
> unstable . Ce qui m'amene a poser les questions suivantes :
Peux-tu préciser ?
Tu a installé quoi (package deb, sources ...) ?
Quelle appli ?
Quand te réclamme-t-elle libstdc++...... ?
Sortie exacte du programme ?
> _ Une version de lib est-elle reclamee parce qu'un prog utilise
> des fonctions qui ne sont pas presentes dans la version installee
> ou simplement ( betement ?! ) parce que c'etait la version presente
> sur la machine lorsque l'executable a ete compile ???
> _ N'existe-t-il pas une facon plus "portable" de faire appel a des
> librairies systeme afin d'eviter ce genre de blocage ???
>
Quand un programme est compilé avec des librairies (dynamiques la
plupart du temps maintenant), la compilation se présente ainsi (en
gros):
gcc mon_programme.c -lgdk -lgtk -lm ....
l'option -l signifie que l'éditeur de lien va utiliser
la librairie nommée libgtk.so.1, et a l'exécution, la fonction du noyau
chargée d'exécuter un processus (exec()) va faire appel au 'décodeur'
ELF pour lire l'executable et charger dynamiquement les librairies
référencées.
-lm = utilise libm.so
-lgdk = utilise libgdk.so
En réalité c plus complexe, mais j'ai la flemme d'expliquer :)
Un bon article est ici (ancien mais efficace) :
http://www.linuxfocus.org/Francais/November1997/article6.html
Une appli compilée avec une version x d'une librairie fonctionnera
aussi avec une lib de version x+1 si et seulement si l'interface
est exactement la meme. Autrement dit, si seuls des modifs ont
été faites dans l'implémentation des fonctions, mais le nombre
de fonctions et leurs parametres identiques, alors les lib sont
100% compatibles.
Mais après changement de lib à la main, il ne faut pas oublier
d'exécuter ldconfig, qui met à jour ld.so.cache pour que le chargeur
elf sache quel fichier correspond à la lib dont le so-name enregistré
est appelé par le programme.
Il y a plein de liens symboliques dans /usr/lib, pour assurer
une compatibilité des versions, voire la doc de linuxfocus,
qui explique tout en détails.
> Merci d'avance d'eclairer ma lanterne de non-programmeur
De rien,
j'espère ne pas t'avoir embrouiller plus :)
Je suis pas sur d'etre clair...