en fait dans l'idee, les modules utilisent des symboles tels que des singletons qui sont definis dans le core du serveur et le --export-dynamic permet de resoudre ces symboles uniquement au loading du module en allant tapper dans ceux du serveur.
C'est tout du moins le fonctionnement auquel j'etait parvenu en utilisant un Makefile a la mano dans lequel je precisait juste l'export-dynamic au moment du link (la difference etait que tout les .o etaient compiles et ensuite ils etaient tous linkes d'un coup -- ca ne passait pas par des librairies temporares comme c'est le cas avec mes
Makefiles.am)
Voici donc les extraits de mes differents fichiers :
*
Configure.in
a la racine du projet:
AC_INIT(Core, 1.0,
bug-report@mailinator.org)
AM_INIT_AUTOMAKE(Core, 1.0)
AC_PROG_CXX
AC_PROG_LIBTOOL
AC_DEFINE(TIXML_USE_STL)
AC_DEFINE(BOOST_ALL_NO_LIB)
AC_PROG_INSTALL
AC_OUTPUT( \
./Makefile \
./src/Makefile \
./src/core/Makefile \
./src/core/common/Makefile \
./src/include/Makefile \
./src/modules/Makefile \
./src/modules/module1/Makefile \
)
* Le
Makefile.am a la racine
SUBDIRS = src
* Le
Makefile.am dans ./src
SUBDIRS = \
core \
include \
modules
* Le
Makefile.am dans ./src/core (c'est la ou la compile du core se fait, et c'est la qu'il y a le main.cpp et les sous repertoires qui separent le code du core. je simplifie l'arborescence pour des questions de lisibilite)
SUBDIRS = common
bindir = @prefix@/bin
bin_PROGRAMS = core
coredir = @prefix@/bin
core_SOURCES = main.cpp
core_LDADD = common/libcorecommon.a
INCLUDES = \
-I@top_srcdir@/src/include \
-I./common
LIBS = -lpthread -ldl -Wl,--export-dynamic
* Le
Makefile.am dans le repertoire ./src/core/common/ (celui qui est sense compiler la
libcorecommon.a qui sera linkee ensuite avec le main.cpp (.o) ) -- C'est dans ce repertoire que le Parser et le Logger sont des singletons et donc j'aurais besoin que les symboles soient accessibles depuis mes modules.
noinst_LIBRARIES = libcorecommon.a
libcorecommon_a_SOURCES = \
Parser.h \
Parser.cpp \
Logger.h \
Logger.cpp \
Utils.h \
Utils.cpp
INCLUDES = -I@top_srcdir@/src/include/
* et enfin le
Makefile.am d'un des modules ( ./src/modules/module1/ )
lib_LTLIBRARIES =
mod1.lamod1_la_SOURCES = \
header1.h \
source1.cpp \
header2.h \
source2.cpp
mod1_la_LDFLAGS = -version-info 1:0:0
INCLUDES = \
-I@top_srcdir@/src/include \
-I@top_srcdir@/src/core/common