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 bibliothèque .so


Sujet :

C++

  1. #1
    Membre éclairé Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Points : 656
    Points
    656
    Par défaut Problème de bibliothèque .so
    Bonsoir.

    Je me prends la tête sur un truc tout simple depuis 3 jours : je voudrais faire une bibliothèque .so et m'en servir.

    J'ai ce Makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lib: biblio.cc biblio.h
    	g++ -fPIC -c biblio.cc $(CXXFLAGS)
    	g++ -shared -o libtest.so biblio.o
    	rm *.o
    main: lib main.cc
    	g++ -c $(CXXFLAGS) main.cc
    	g++ -L. -ltest -o main main.o
    	rm *.o
    Et j'ai ces 3 fichiers :
    biblio.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef _TEST_H_
    #define _TEST_H_
     
    class Test {
    public:
       void test();
     
    };
    #endif
    biblio.cc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "biblio.h"
    #include <stdio.h>
     
    void Test::test() {
       printf("bouh\n");
    }
    main.cc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "biblio.h"
     
    int main() {
       Test *t=new Test();
       t->test();
       delete t;
    }
    Quand je fais make lib tout va bien mais le make main me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    g++ -c -Wall main.cc
    g++ -L. -ltest -o main main.o
    main.o: In function main:
    main.cc:(.text+0x1e): undefined reference to Test::test()
    collect2: error: ld returned 1 exit status
    make: *** [main] Erreur 1
    J'ai tenté 50 versions différentes de compilation, aucune ne passe.

    Si quelqu'un pouvait m'aider... Merci d'avance !

    @+
    Rémi

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    C'est sûr que c'est troublant. J'ai peut-être une piste (bonne ou mauvaise) : mettre le code de biblio.cc dans biblio.h résout le problème, j'imagine que c'est donc au moment de faire "make lib" que les choses se passent mal et silencieusement.
    Bon courage

  3. #3
    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
    Je ne reproduis pas. J'ai fait un répertoire avec le contenu des fichiers que tu donnes et make main donne le résultat auquel je m'attends.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    n'est ce tout simplement pas un problème de visibilité des symboles à régler à coup de __attribute__((visibility("default"))) etc ... ?

  5. #5
    screetch
    Invité(e)
    Par défaut
    Tu as peut etre une autre bibliotheque qui s'appelle test quelque part. Essaye avec un autre nom de bibliotheque.

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Je ne reproduis pas. J'ai fait un répertoire avec le contenu des fichiers que tu donnes et make main donne le résultat auquel je m'attends.
    Si Jean Marc ne le reproduit pas, c'est que c'est peut être un problème de linkage. J'ai un suspect : le linker sur MacOS X réagit un peu differemment de celui sous Linux. Sur quelle plateforme es-tu ?

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Points : 2 627
    Points
    2 627
    Par défaut
    Salut,

    j'ai déjà eu ce genre de problème. Je ne sais pas si ça vient d'une version de distib ou pas. Mais sous Suse 10, contrairement à Windows, on n'arrivait pas à linker (ou exécuter) un binaire qui dépendait d'une lib, alors que cette lib était dans le même répertoire.
    Il fallait mettre explicitement le répertoire courant dans le 'path', dans ton cas, mettre le répertoire courant dans la variable d'environnement LD_LIBRARY_PATH.

    PS: que dit la commande nm sur ce .so ?

  8. #8
    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
    LD_LIBRARY_PATH est pour l'execution, il a un probleme a l'edition de liens et -L devrait faire ce qu'il faut a ce moment-la.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  9. #9
    Membre éclairé Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Points : 656
    Points
    656
    Par défaut
    Bonsoir.

    Merci des réponses proposées !
    J'ai trouvé comment faire marcher mon truc. J'ai modifié le Makefile en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lib: biblio.cc biblio.h
    	g++ -fPIC -c biblio.cc $(CXXFLAGS)
    	g++ -shared -o libtest.so biblio.o
    	rm *.o
    main: lib main.cc
    	g++ -c $(CXXFLAGS) main.cc
    	g++ -Wl,-rpath,. -o main main.o libtest.so
    	rm *.o
    @+
    Rémi

Discussions similaires

  1. Problème Message Bibliothèque manquante
    Par philweb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/07/2007, 05h44
  2. Problème compilation bibliothèque graphique
    Par akrogames dans le forum C++
    Réponses: 5
    Dernier message: 09/03/2007, 13h00
  3. Problème fonction bibliothèque
    Par Matiou83 dans le forum C
    Réponses: 4
    Dernier message: 09/10/2006, 11h21
  4. [VBA-E]Problème de bibliothèque
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/07/2006, 01h45
  5. Utiliser CFile... Problème de bibliothèques
    Par GregouzeLaLoose dans le forum MFC
    Réponses: 8
    Dernier message: 01/07/2005, 15h08

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