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 :

Undefinded symbol obtenu en rajoutant des libs


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 26
    Points
    26
    Par défaut Undefinded symbol obtenu en rajoutant des libs
    Bonjour à tous,

    J'ai créé un petit gestionnaire de plugins pour une application que je développe.
    Tout fonctionne correctement puis je décide d'ajouter gtkmm (je poste ici plutôt qu'en C++ car j'utilise dlopen).

    Pour cela je rajoute une option de compilation : `pkg-config gtkmm-2.4 --cflags --libs` au coeur de mon projet (qui utilise dlopen)

    et à l'exécution, lors du chargement du fichier .so, ça me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lib/libplayer.so: undefined symbol: _ZN4Core7pluginsE
    (En sachant que j'ai une classe Core qui a une variable static plugins)

    Voici le makefile compilant le fichier qui va utiliser dlopen
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    BLM_PATH = ../../bin/core
    BLM_BIN = $(BLM_PATH)/BLM
    BLM_SOURCE = Core.cpp
    BLM_FLAGS = -ldl -rdynamic
    BLM_FLAGS = `pkg-config gtkmm-2.4 --cflags --libs` 
    
    CC      = g++
    CFLAGS  = -Wall -Werror -ansi -pedantic
    CFLAGS  += -g
    CFLAGS  += -D_XOPEN_SOURCE=500
    
    all: $(BLM_BIN)
    
    $(BLM_BIN): $(BLM_SOURCE)
    	mkdir -p $(BLM_PATH);
    	$(CC) -o $@ $^ $(BLM_FLAGS)
    
    .PHONY: clean
    
    clean:
    	$(RM) *~ tags
    les plugins sont compilés avec les options -shared -fPIC
    et dlopen est ouvert de la façon suivante :void *handle = dlopen("lib/libplayer.so",RTLD_LAZY);

    De plus, la variable qui va contenir tous les plugins est déclarée dans Core.hpp mais elle est initialisée dans Core.cpp, qui contient le main.

    Merci d'avance pour l'aide que vous pourrez m'apporter !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Bonsoir à tous,
    problème résolu, j'ai fait une belle boulette dans mon Makefile
    dans l'ajout de lib j'ai mis '=' au lieu de '+='

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

Discussions similaires

  1. [ZF 1.9] render qui rajoute des symboles ?
    Par Bakura dans le forum Autres composants
    Réponses: 1
    Dernier message: 05/02/2010, 01h11
  2. [Jboss][Log4j] Rajouter des regles automatiquement
    Par Hikage dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 12/04/2006, 20h04
  3. Le compilo c/c++ charge t il des lib par défaut???
    Par yashiro dans le forum Linux
    Réponses: 1
    Dernier message: 25/03/2006, 19h36
  4. Organisation pour rajouter des tables
    Par thufir hawat dans le forum Access
    Réponses: 4
    Dernier message: 14/10/2005, 12h09
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 15h09

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