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 :

Ordre des librairies au linkage


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Points : 103
    Points
    103
    Par défaut Ordre des librairies au linkage
    Bonjour,

    Je viens d'avoir un problème résolu sans que je ne le comprenne réellement.
    J'ai deux librairies statiques A et B dont B utilise des choses de A. Ces deux librairies sont compilées puis mises sous forme de deux archives A.a et B.a.
    Dans un projet j'utilise ces deux librairies, non seulement les éléments de A ET aussi ceux de B. Dans la commande du linkage, je suis obligé de mettre -lB -lA dans cet ordre et pas -lA -lB.

    Si quelqu'un a une explication, merci beaucoup.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    C'est tout à fait normal. Quand le linker traite une librairie, il ne garde une trace que des dépendances et balance tout ce qui est entièrement défini. Lorsqu'il passe à la librairie suivante, le linker vérifie s'il peut combler les dépendances précédemment trouvée.

    Un exemple simpliste pour illustrer ça :
    lib1.a contient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void foo()
    {
      bar();
    }
    lib2.a contient ceci :
    Si tu linkes dans cet ordre -l2.a -l1.a, le linker va d'abord voir bar, et comme il n'y a aucune dépendance à résoudre, il la considère comme traitée, n'en garde aucune trace, et passe à la suite. Il va donc arriver à foo et voir qu'elle appelle bar qui n'est pas définie dans lib1.a, il va donc en garder en trace afin de pouvoir résoudre cette dépendance par la suite. Fin, les deux librairies sont traitées, la dépendance n'est pas résolue, ça ne compile pas.

    Si tu linkes dans cet ordre -l1.a -l2.a, le linker va d'abord voir foo et voir qu'elle appelle bar qui n'est pas définie dans lib1.a, il va donc en garder en trace afin de pouvoir résoudre cette dépendance par la suite. Il arrive ensuite à bar, se rend compte que c'est cette fonction dont avait besoin lib1.a et donc résoudre la dépendance. Fin, les deux librairies sont traitées, la dépendance est résolue, ça compile.

    N'étant absolument pas un expert en linker, je n'utilise peut être pas les bons termes techniques, mais grossièrement, c'est comme ça que fonctionne. Ca dépend des linkers ceci dit, certains conservent une trace d'absolument tout et sont capables de résoudre les dépendances quel que soit le sens dans lequel sont linkés les libairies.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Points : 103
    Points
    103
    Par défaut
    Ok, merci de l'info.

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

Discussions similaires

  1. ordre des librairies statiques pour ld
    Par hector2 dans le forum C
    Réponses: 2
    Dernier message: 25/10/2011, 16h00
  2. Ordre d'entrée des librairies
    Par cedouche dans le forum C
    Réponses: 7
    Dernier message: 11/07/2008, 12h56
  3. Ordre de chargement des librairies
    Par Duc Lebowski dans le forum Weblogic
    Réponses: 1
    Dernier message: 15/01/2008, 17h31
  4. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 07h22
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 22h33

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