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 :

Problème de Librairie statique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut Problème de Librairie statique
    Bonjour,

    J'ai un petit...bon d'accord un gros problème lors de l'édition des liens dans un projet (de test) qui utilise une Lib' que je suis en train de faire. Un petit peu de code pour voir tout ça :

    Côté Projet test:
    -Main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include "../MaLib.h"
     
    using namespace LibSpace;
     
    int main()
    {
            Init("./log.html");
    	std::cout << "Hello world!" << std::endl;
    	DeInit();
    	return 0;
    }
    (La Lib est correctement donnée dans les paramètres du Linker pour ce projet)

    Côté Lib' :
    -MaLib.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    namespace LibSpace
    {
        //...
        void Init(const std::string FileName);
        void DeInit(void);
    }
    -Init.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "MaLib.h"
     
    void Init(const std::string FileName)
    {
        //...
    }
    void DeInit(void)
    {
        //...
    }
    Voilà grosso-modo l'architecture du 'schmilblick'...
    Maintenant le retour lors de l'édition des liens :
    .objs\main.o:main.cpp.text+0x21c2): undefined reference to `LibSpace::Init(std::string)'
    .objs\main.o:main.cpp.text+0x226d): undefined reference to `LibSpace:eInit()'
    Pourtant, la déclaration et l'utilisation d'objet venant des Headers de cette lib n'est pas une faute pour le compilo...

    Toute idée est la bienvenue!!!

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Oublie du dans Init.cpp.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Albenejean Voir le message
    Oublie du dans Init.cpp.
    Et, de manière plus "propre":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include "MaLib.h"
    namespace LibSpace
    {
     
    void Init(const std::string FileName)
    {
        //...
    }
    void DeInit(void)
    {
        //...
    }
     
    }//namespace LibSpace
    (je n'aime pas trop les directive d'utilisation d'espace de nommage ... mais les deux sont valables )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Ok merci ça corrige le problème, mais comme qui dirait "Un de corrigé, Dix de déclarés"
    ^^
    ..\..\Malib.a(Init.o):Init.cpp: multiple definition of [...]
    .objs\main.o:main.cpp.text+0x100): first defined here
    Comme si les Headers était relus plusieurs fois alors qu'ils sont bien protégés par
    #ifndef __HEADER__
    #define __HEADER__
    [...]
    #endif

  5. #5
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Je sais pas comment tu fais, mais apparement tu inclus plusieurs fois le fichier.cpp.

  6. #6
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Je sais pas comment tu fais, mais apparement tu inclus plusieurs fois le fichier.cpp.
    Inclure un "*.cpp"? Euh le seul lien entre les headers et le Init.cpp c'est l'Include du Init.cpp...

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

Discussions similaires

  1. librairie statique et problème d'initialisation
    Par vingt sens dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 06/06/2010, 16h25
  2. Réponses: 2
    Dernier message: 09/12/2009, 18h54
  3. Problème avec une librairie statique
    Par flo_k dans le forum C
    Réponses: 2
    Dernier message: 21/09/2009, 21h50
  4. Problème librairie statique
    Par apesle dans le forum C++
    Réponses: 4
    Dernier message: 30/03/2009, 23h12
  5. Réponses: 5
    Dernier message: 08/03/2006, 22h37

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