Il y a une virgule ici: -Wl,--export-dynamic (je ne sais pas si c'est
obligatoire) mais pourquoi en as tu besoin?


oui, je tappait ca de tete ;-) mais la virgule est bien presente

J'ai un projet à base de modules dynamiques qui fonctionne très bien sans.


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)

As tu lancé libtoolize? (peut être qu'un make maintainer-clean aiderait
aussi)


J'ai lance un libtoolize, mais je n'ai pas vu beaucoup de difference (il n'y
a pas eu d'output). Je testerait le make maintainer-clean, mais a chaque
fois que je fait un test, je recompile tout les objs (le core du serveur et
le module que je test ne sont pas tres longs a compiler)

Sinon c'est pas très clair, comment compiles tu les modules et comment les
utilises tu ? (avec lt_dlopen?) Le makefile complet serait utile (si il ne
fait pas 15 pages :)


Voici donc les extraits de mes differents fichiers :


* Configure.in a la racine du projet:

AC_INIT(Core, 1.0, [EMAIL PROTECTED])
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    = \
   [EMAIL PROTECTED]@/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    = [EMAIL PROTECTED]@/src/include/

* et enfin le Makefile.am d'un des modules ( ./src/modules/module1/ )

lib_LTLIBRARIES    = mod1.la

mod1_la_SOURCES = \
   header1.h \
   source1.cpp \
   header2.h \
   source2.cpp

mod1_la_LDFLAGS    = -version-info 1:0:0

INCLUDES = \
   [EMAIL PROTECTED]@/src/include \
   [EMAIL PROTECTED]@/src/core/common


Voila, je pense que le probleme viens d'un de mes fichiers ou d'une etape
que je fait mal, mais comme je suis debutant en Autotools, je ne suis pas
encore au fait des bonnes pratiques.

deux questions bonus pour terminer :
1) pour resoudre mon probleme de compilation et d'export-dynamic je pourrais
passer par un Makefile.am dans ./src/core/ qui compilerait tout mes fichiers
(meme ceux qui sont dans des sous-repertoires) en une seule fois. mais
est-ce vraiment propre?
2) quelles difference entre automake-autoconf-libtool et autotools? les
premiers font-ils partie du second?

Merci d'avance

--
105 116 039 115 032 110 111 116 032 097
032 098 117 103 044 032 105 116 039 115
032 097 032 102 101 097 116 117 114 101

Répondre à