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 :

Edition de liens dynamique sous linux


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Edition de liens dynamique sous linux
    Bonjour,

    J'ai créé et compilé une bibliothèque dynamique (biblio.so) (utilisation de -shared avec g++ lors de l'édition de liens)

    Lors de l'insertion de biblio.so dans mon exécutable final, le répertoire d'édition de liens est différent de celui où la bibliothèque est (le projet comporte plusieurs sous parties).

    En tapant la comande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ main.o monrep/biblio.so
    , l'édition de lien passe, mais des problèmes apparaissent lors de l'exécution : le système cherche monrep/biblio.so !

    J'ai bien essayé des commandes du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -L monrep/ main.o biblio.so
    , mais il ne trouve jamais ma bibliothèque (j'ai essayé aussi avec -B)

    Si qq a une idée.

    Merci d'avance

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    A transferer vers le forum linux.

    Trois solutions:
    • configurer ld (fichier /etc/ld.so.conf ou qqch comme ca) pour faire la recherche ou la lib est installee
    • utiliser LD_LIBRARY_PATH pour faire la meme chose
    • utiliser -Wl,-R pour mettre dans l'executable un repertoire ou faire la recherche.


    La premiere methode, c'est pour l'administrateur du systeme.

    La deuxieme pour l'utilisateur.

    La troisieme pour celui qui fait le programme.

    Elles ont toutes leurs avantages et leurs inconvenients.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    En fait, le problème n'est pas l'exécution, mais l'édition de liens (la hiérarichie des répertoires n'est pas la même lors de l'exécution que lors de la compilation).

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Ipoupaille
    En fait, le problème n'est pas l'exécution, mais l'édition de liens (la hiérarichie des répertoires n'est pas la même lors de l'exécution que lors de la compilation).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // main.cpp
    void f();
     
    int main() {
      f();
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // dyn.cpp
    #include <iostream>
     
    void f() {
      std::cout << "Dans la lib dynamique\n";
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ pwd
    /home/jm/Ipoupaille
    $ g++ -fPIC -c dyn.cpp
    $ g++ -shared -o dyn.so dyn.o
    $ g++ -c  main.c
    $ g++ -o main main.o dyn.so
    $ mkdir tmp
    $ cp dyn.so tmp
    $ ./main
    ./main: error while loading shared libraries: dyn.so: cannot open shared object file: No such file or directory
    $ LD_LIBRARY_PATH=./tmp ./main
    Dans la lib dynamique
    $ rm tmp/dyn.so
    $ g++ -Wl,-R$HOME/Ipoupaille/tmp -o main main.o dyn.so
    $ cp dyn.so tmp
    $ ./main
    Dans la lib dynamique
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    En fait, je pense que j'ai mal du exprimer mon problème. Je n'ai pas de soucis à la recherche des librairies à l'exécution, mais à l'édition de liens.

    Mais j'ai trouvé une solution :

    la librairie doit avoir un nom du genre lib*.so, comme par exemple libBiblio.so

    la commande d'édition de liens est alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -L repertoireDeLaLibrairie main.o -l Biblio
    L'éditeur de liens va alors chercher le fichier libBiblio.so dans tous les répertoires de recherches par défaut, plus celui rajouté.

    Lors de l'exécution, la bibliothèque est recherchée dans les répertoires de recherches (dont ceux de LD_LIBRAIRY_PATH)

    Si j'avais tapé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ main.o repertoireDeLaLibrairie/libBiblio.so
    alors la librairie recherchée lors de l'exécution aurait été repertoireDeLaLibrairie/libBiblio.so (sans doute relativement aux répertoires de recherches d'exécution).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/05/2012, 11h48
  2. Réponses: 9
    Dernier message: 01/04/2012, 04h44
  3. Lien Dynamique sous Unix.
    Par ox@na dans le forum Général Java
    Réponses: 2
    Dernier message: 05/05/2008, 11h49
  4. lien hypertext telnet ne marche pas sous linux
    Par RonnCmoi dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 28/04/2008, 11h35
  5. Edition de liens et librairie dynamique
    Par nicolas.pied dans le forum C++
    Réponses: 9
    Dernier message: 14/11/2005, 14h29

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