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:
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:
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 !