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 :

[MSVC8] Linker des librairies statique dans une librairie statique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Par défaut [MSVC8] Linker des librairies statique dans une librairie statique
    Bonjour,

    Je travaille sur une librairie statique, qui depend elle meme d'autres librairies statique.

    L'executable utilisant ma librairie foire au linkage, car elle reclame les librairies dont ma librairie est dependante.

    Je cherche donc a inclure ses dependance de maniere a ce que l'executable n'aie besoin que de ma librairie.
    J'ai essaye de changer les options lors de la compilation de ma librairie, mais rien n'y fait...

    Existe t-il une solution a ca, ou devrais-je me resoudre a faire un dll ?

    merci =)

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ce n'est pas possible, il me semble (mais je peux me tromper ). Tu dois inclure à la fin la totalité des bibliothèques. Un des avantages des bibliothèques statiques est de ne pas nécessiter une édition des liens complètes, contrairement aux bibliothèques dynamiques.

  3. #3
    Membre confirmé Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Par défaut
    merci pour cette reponse rapide

    mais a voir la reponse je suis un peu deg lol

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Tu vas dans les propriétés du projet et dans Librarian tu ajoutes les .lib dans Additional Dependencies (la 2e ligne).

    MAT.

  5. #5
    Membre confirmé Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Salut,

    Tu vas dans les propriétés du projet et dans Librarian tu ajoutes les .lib dans Additional Dependencies (la 2e ligne).

    MAT.
    c'est bien ce que je fais
    J'ai aussi mis "Link Library dependencies" a "yes"...

    Si la bibliothèque statique est liée directement lors de la compilation d'une autre bibliothèque(statique ou dynamique), pourquoi il faudrait inclure la première lib dans le projet utilisant la deuxième...? Pour moi, c'est justement l'avantage d'une lib statique, je me trompe?
    eh bien cette lib est un framework qui encapsule pas mal de choses, et ca m'embete de specifier toutes ces dependances dans l'appli, ca fait assez bordelique =)

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par 5:35pm Voir le message
    c'est bien ce que je fais
    Et bien dans ce cas tu n'as pas besoin des .lib que tu listes dans cette case lors de l'édition des liens finale, ils sont inclus dans ton .lib intermédiaire. Tu peux le vérifier en observant la différence de taille du .lib et/ou avec un dumpbin /all truc.lib | grep ton_symbol.

    Par contre oui c'est quand même très risqué : si le client utilise par ailleurs les mêmes bibliothèques dans des versions différentes, ça va faire n'importe quoi au final.

    Citation Envoyé par 5:35pm Voir le message
    J'ai aussi mis "Link Library dependencies" a "yes"...
    Non ça n'a rien à voir ça par contre.

    MAT.

  7. #7
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Ce n'est pas possible, il me semble (mais je peux me tromper ). Tu dois inclure à la fin la totalité des bibliothèques. Un des avantages des bibliothèques statiques est de ne pas nécessiter une édition des liens complètes, contrairement aux bibliothèques dynamiques.
    Si la bibliothèque statique est liée directement lors de la compilation d'une autre bibliothèque(statique ou dynamique), pourquoi il faudrait inclure la première lib dans le projet utilisant la deuxième...? Pour moi, c'est justement l'avantage d'une lib statique, je me trompe?

    Ce n'est pas justement la librairie dynamique qui ne nécessite pas une édition des liens complètes... ...

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Ce n'est pas possible, il me semble (mais je peux me tromper ). Tu dois inclure à la fin la totalité des bibliothèques. Un des avantages des bibliothèques statiques est de ne pas nécessiter une édition des liens complètes, contrairement aux bibliothèques dynamiques.
    Je confirme

    Le link statique se finalise lors de la création de l'exécutable donc il faut la liste des toutes les librairies statiques (même celles qui dépendent/sont utilisées par une autre librairie intermédiaire)

    Par contre, je ne sais pas pourquoi il faut ajouter les librairies statiques lors de la création des librairies statiques intermédiaires. Tu as essayé de créer cette librairie intermédiaire sans lier avec les autres librairies ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre confirmé Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Par défaut
    mmm un detail que j'aurais du preciser, j'ai pas mal de warning a la compilation de la librairie:

    winmm.lib(WINMM.dll) : warning LNK4221: no public symbols found; archive member will be inaccessible

    ca le fait pour chaque librairie tierce...

    EDIT

    selon msdn: http://support.microsoft.com/kb/815773:

    This article discusses the Linker Tools Warning LNK4221 message. This warning occurs when you try to add resources to a static library. The linker tries to add resources in a publicly accessible way. However, the linker fails and you receive the following warning message:
    warning LNK4221: no public symbols found; archive member will be inaccessible
    An object file was added to an archive library that has no public symbols. The object is not accessible by using subsequent linker commands.
    et ce lien dit :

    Linker Tools Warning LNK4221:
    A .obj file with no public symbols was added to a library. The symbols in the object will not be accessible in subsequent linker operations that include the .lib.

    To resolve this warning, do not link a .obj file with no public symbols into a library.
    donc en gros il faut des symboles public, et je ne sais pas comment ca marche... ou alors c'est vraiment pas possible...

Discussions similaires

  1. JNI - Chargement d'une librairie 32bits dans une vm 64bits
    Par forthx dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/04/2012, 19h34
  2. Réponses: 4
    Dernier message: 24/08/2011, 18h23
  3. Réponses: 3
    Dernier message: 03/08/2008, 12h35
  4. appeler une librairie .so dans une classe
    Par tet.dum dans le forum Langage
    Réponses: 8
    Dernier message: 31/10/2006, 09h34
  5. Réponses: 2
    Dernier message: 02/05/2006, 14h34

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