IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème linkage: $LD_LIBRARY_PATH non pris en compte !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut Problème linkage: $LD_LIBRARY_PATH non pris en compte !
    Bonjour à tous,

    Je me retrouve confronté depuis quelques jours à un problème pour le moins étrange ...

    J'ai sur ma machine (Fedora 13 x86_64) une librairie installée par défaut dans /usr/bin, dont la version est 4.3.1. Cette version étant obsolète pour un programme que je dois faire, j'ai installé la nouvelle version (5.0.2) à l'aide des sources.
    La nouvelle librarie s'est naturellement installée dans /usr/local/lib (jusque là rien d'anormal !).
    J'ai ensuite exporté la variable d'environnement LD_LIBRARY_PATH comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib
    Lorsque je compile mon prgramme normalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc main.c -o test -lgmp -lm
    la version de la librairie utilisée (accessible via une macro) que m'indique mon programme est 4.3.1 (soit l'ancienne version !)
    Bien sur, lorsque je compile en forcant la recherche de librairie dans /usr/loca/lib, la version utilisée est la bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc main.c -o test -L/usr/local/lib -lgmp -lm
    Plus étonnant encore, la fichier en-tête utilisé est dans les deux cas est celui de nouvelle version !!

    Qu'ai-je mal fait ?

    Merci de l'aide que vous pourrez m'apporter.

  2. #2
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    Je pense que vu que tu n'as pas désinstallé la bibliothèque en version 4.3.1
    Si elle est placée avant la version 5.0.2 dans le path, à moins de préciser la version que tu cherches, elle sera trouvée avant (4<5).

    Une fois que ton programme a trouvé la bibliothèque, il ne va pas regarder si il en trouve une version plus récente (pourquoi faire, il a une version sous la main, après tout).

    Edit : je soupçonne que /usr/bin se trouve avant /usr/local/bin dans ton path.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Bonjour,

    La version 4.3.1 est installée dans /usr/lib
    La version 5.0.2 est installée dans /usr/local/lib

    LD_LIBRARY_PATH est initialisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LD_LIBRARY_PATH=/usr/local/lib:/usr/lib
    Autrement dit, le path /usr/local/lib doit être traité avant /usr/lib.
    Donc la version 5.0.2 est normalement celle que le linker doit prendre !

    D'où mon problème...

    Edit: Une méthode simple aurait été de désinstaller la version 4.3.1, mais c'est impossible puisqu'elle est utilisée par plusieurs autres programmes !

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Attention, dans ton premier commentaire, tu as écrit « /usr/bin » et pas « /usr/lib » (troisième phrase).

    Il y a plusieurs possibilités :

    • La nouvelle installation a mis en place un ou plusieurs liens symboliques portant les anciens noms et pointant la nouvelle bibliothèque ;
    • L'une ou l'autre de ces bibliothèques ont un soname interne qui prend le pas sur le nom du système de fichier en cas de difficulté ;
    • Ton export LD_LIBRARY_PATH n'a pas d'effet dans l'environnement où tu exécutes ton exécutable ;
    • Le fichier /etc/ld.so.conf voit les choses différemment, également.


    Que donne ldd sur ton exécutable ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Bonjour,

    Voici le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ldd test                                                                                                                           
            linux-vdso.so.1 =>  (0x00007fff47dff000)                                                                                                               
            libgmp.so.3 => /usr/lib64/libgmp.so.3 (0x0000003e91e00000)                                                                                             
            libm.so.6 => /lib64/libm.so.6 (0x000000318c800000)                                                                                                     
            libc.so.6 => /lib64/libc.so.6 (0x000000318c400000)
            /lib64/ld-linux-x86-64.so.2 (0x000000318c000000)
    (Tu as raison Obsidian, le /usr/bin est une erreur d'inattention... C'est bien de /usr/lib dont il s'agit)

    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export LD_LIBRARY_PATH=**
    est fait dans ~/.bashrc. Et la variable vaut bien /usr/local/lib:/usr/lib" lors d'un appel à

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Si tu récupères la version de ta lib avec une macro, c'est que la version en question est définie dans un header, pas dans la lib. Donc ton problème n'a rien à voir avec LD_LIBRARY_PATH, mais simplement avec le fait que tu ne vas pas chercher les headers au bon endroit.

Discussions similaires

  1. CSS non pris en compte problème d'affichage !
    Par clementdevelop dans le forum Mise en page CSS
    Réponses: 21
    Dernier message: 13/05/2013, 08h53
  2. Réponses: 4
    Dernier message: 29/06/2012, 10h44
  3. Réponses: 4
    Dernier message: 10/11/2010, 22h01
  4. Réponses: 1
    Dernier message: 09/04/2010, 20h02
  5. [event] keyListener non pris en compte
    Par pierre.zelb dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/08/2005, 08h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo