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 :

GCC - Link librairie dynamique et statique


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut GCC - Link librairie dynamique et statique
    Bonjour,

    Je travaille sous Linux avec un compilateur gcc.

    J'ai créé une librairie dynamique (shared_lib.so) qui va être utilisée par une autre librairie (static_lib.a) mais celle-ci est statique.

    La librairie statique static_lib.a sera utilisée par un ensemble d'exécutables, par exemple, exec.rh5.

    Quand, je compile exec.rh5, je le linke avec static_lib.a évidemment, mais j'aimerais pouvoir éviter de le linker avec shared_lib.so.

    Pour se faire, j'aimerais inclure les symboles de la librairie dynamique dans la statique, si cela est possible. Mais comment?

    Merci d'avance

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par cnicolot Voir le message
    Quand, je compile exec.rh5, je le linke avec static_lib.a évidemment, mais j'aimerais pouvoir éviter de le linker avec shared_lib.so.

    Pour se faire, j'aimerais inclure les symboles de la librairie dynamique dans la statique, si cela est possible. Mais comment?
    Pour y arriver, il faut déjà que le programme qui linke sur static_lib n'utilise aucun symbole de shared_lib. Si tu te contentes d'utiliser les symboles de static_lib dans ton exécutable, cela devrait avoir le comportement que tu cherches. Je n'ai pas testé, c'est une supposition.

    Tu ne peux pas "inclure" des symboles dynamiques dans une lib statique. Si tu veux obtenir ce comportement, il faut mettre dans ta lib statique des méthodes qui lui seront propres et qui mappent sur les méthodes correspondantes dans shared_lib. Un beau bordel en perspective en terme de maintenance.

    Peut être qu'on peut en savoir plus sur ton projet, peut être qu'il y a une solution plus propre ?
    Find me on github

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Pour y arriver, il faut déjà que le programme qui linke sur static_lib n'utilise aucun symbole de shared_lib. Si tu te contentes d'utiliser les symboles de static_lib dans ton exécutable, cela devrait avoir le comportement que tu cherches. Je n'ai pas testé, c'est une supposition.
    Sur ce point, on est d'accord. En effet, le programme n'utilisera aucun symbole provenant de la lib dynamique. Cependant, lors de l'édition des liens, gcc reconstitue les symboles et cherche sans succès les symboles utilisés dans la static, issus de la dynamic, même si ceux-ci sont "non exposés".

    Peut être qu'on peut en savoir plus sur ton projet, peut être qu'il y a une solution plus propre ?
    Et bien la solution la plus propre est de ne produire que des shared lib, mais mon projet nécessite la conservation de la librairie statique. Voici un schéma rapide qui montre les dépendances, pour lever tout doute :

    Executable.rh5
    _____|
    _____V
    libStatic.a
    _____|
    _____V
    libShared.so

    Merci d'avance

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par cnicolot Voir le message
    Sur ce point, on est d'accord. En effet, le programme n'utilisera aucun symbole provenant de la lib dynamique. Cependant, lors de l'édition des liens, gcc reconstitue les symboles et cherche sans succès les symboles utilisés dans la static, issus de la dynamic, même si ceux-ci sont "non exposés".
    Je m'en doutais, ce pour quoi j'avais précisé que je n'avais pas testé. Il n'y pas de solution : soit tu met tout en statique, soit tes deux libs en dynamiques, soit tu fournis la dynamique à l'édition de lien. Pourquoi ne veux tu pas faire ça ? En quoi ça pose un problème ?
    Find me on github

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Je ne peux pas changer d'approche car je dois fournir exclusivement des librairies statiques qui forment un SDK, sauf la libShared.so qui est particulière.

    Pourquoi faire simple quand on peut faire compliqué???

    En tout cas, ta réponse m'étonne qu'à moitié et me conforte presque à l'idée de dire : vous penserez à linker vos applications avec la nouvelle librairie dynamique!

    Merci pur tes réponses

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

Discussions similaires

  1. Lier des librairies dynamiques et statiques, utilisation de CMake
    Par lhareen dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 08/07/2020, 18h30
  2. [GCC] Librairie dynamiques et statiques
    Par CKaiser dans le forum C++
    Réponses: 3
    Dernier message: 05/04/2008, 05h32
  3. librairies dynamiques ou statiques ?
    Par _Michel dans le forum Visual C++
    Réponses: 2
    Dernier message: 05/03/2008, 14h17
  4. Réponses: 3
    Dernier message: 21/11/2007, 08h32
  5. Recompiler une librairie dynamique (DLL) en statique
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 07/04/2005, 19h28

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