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 !