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

Linux Discussion :

Problème de link dynamique


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut Problème de link dynamique
    J'ai un problème surement très simple à résoudre, mais mes connaissances sont trop limitées:

    j'ai besoin de linker avec un certain nombre de DLLs, qui se trouvent dans un sous répertoire /home/compile/lib/ .
    Ce sont des '.so'.

    Aucun problème au link, par contre j'ai des problèmes d'éxécution quand je change de machine, en effet, le linker a gardé les liens en dur sur les librairies que j'ai utilisées !

    Je pensais qu'en linkant en dynamique, au moment de l'execution le système irai chercher les libs dans /usr/lib/, /usr/var/lib, etc... ou autre répetoire spécifié dans le PATH, mais ce n'est pas le cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test_link: error while loading shared libraries: /home/compile/lib/plouf.so: cannot open shared object file: No such file or directory
    Donc comment faire pour dire au linker de ne pas prendre les chemins des DLLs en dur ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    Ton programme va chercher dans la variable LD_LIBRARY_PATH la librairie qu il cherche.

    Donc sur ta deuxième machine ou sont les librairies dont il a besoin ?
    LD_LIBRARY_PATH est setter correctement avec tous les chemins dont il a besoin pour les trouver.
    Que donne ld "ton programme" ?
    Peux tu donner la ligne de commande du linker ?

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut
    J'ai bien setté mon LD_LIBRARY_PATH, voici la ligne correspondante quand je tape 'set':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LD_LIBRARY_PATH=/oracle/10.2/db/lib
    Les librairies qui me posent problème est une librairie oracle. (libnnz.so).
    Les librairies que je spécifie explicitement dans ma ligne de link sont bien résolues (libclntsh.so par exemple)
    Par contre la lib qui pose problème est une dépendance de libclntsh.so (qui elle est bien résolue), et apparemment au link il déconne en stockant le path de cette dépendance.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    en gros tu link avec libclntsh.so

    libnnz.so est une dépendance de libclntsh.so et c est elle qui pose problème.


    que donne "ld libclntsh.so" et "ld tonprogramme"
    et donne aussi la ligne de link quand tu compile sur ta première machine

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut
    Je link actuellement avec gcc.

    J'ai essayé d'ajouter l'option -rpath ou -rpath-link pour le problème de lien entre les .so oracle, mais il n'a pas l'air de connaitre cette option. Ca passe en utilisant --rpath, mais j'ai toujours le problème quand je lance ldd sur mon exe.

    Voilà ce que fait le linker, j'ai simplifié car il y en a pour 3 pages.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cc -pipe   -o /path/vers/mon/exe/test \ 
    [... tous mes .o ...] \      [... plein de libs statiques ...] 
    --rpath /path/vers/mon/rep/de/libs/oracle
     /path/vers/mon/rep/de/libs/oracle/libclntsh.so 
    [... plein de libs statiques ...] 
     -lnsl -lcrypt -lm -lpthread -ldl
    J'ai essayé de mettre LD direct pour linker, et j'ai d'autre dépendances de librairies qui ne sont plus trouvées.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    pour le linker, les chemins à explorer sont à indiquer par -L chemin. On peut en mettre autant qu'on veut.

    Ensuite, il faut indiquer les librairies dans l'ordre de profondeur (si donc une bibliothèque a besoin d'une autre, cette derrière devra être mise après celle qui l'appelle)

Discussions similaires

  1. C/asm : problème pour link
    Par SteelBox dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/04/2004, 23h03
  2. Problème de LINK Bizarre !!
    Par Jasmine dans le forum MFC
    Réponses: 24
    Dernier message: 19/03/2004, 15h58
  3. Problème de link avec Borland C++ 5.5
    Par gelam dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 24/11/2003, 16h45
  4. problèmes de textes dynamique dynamiquement générés
    Par stephane eyskens dans le forum Flash
    Réponses: 18
    Dernier message: 05/09/2003, 13h13
  5. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07

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