donc j'ai suivi les indications de divers tutos expliquants que pour
compiler, je devais passer par autant de libs statiques que de sous
repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
...
que je link ensuite a mon main.o grace a la macro LDADD
comment faire pour les compiler proprement ? (en .so). certains disent
qu'il faut du libtool, d'autres semblent partis pour faire du automake
aussi, ... bref je suis un peu perdu. un petit coup de main serait le
bienvenue :)
donc j'ai suivi les indications de divers tutos expliquants que pour
compiler, je devais passer par autant de libs statiques que de sous
repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
...
que je link ensuite a mon main.o grace a la macro LDADD
comment faire pour les compiler proprement ? (en .so). certains disent
qu'il faut du libtool, d'autres semblent partis pour faire du automake
aussi, ... bref je suis un peu perdu. un petit coup de main serait le
bienvenue :)
donc j'ai suivi les indications de divers tutos expliquants que pour
compiler, je devais passer par autant de libs statiques que de sous
repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
...
que je link ensuite a mon main.o grace a la macro LDADD
comment faire pour les compiler proprement ? (en .so). certains disent
qu'il faut du libtool, d'autres semblent partis pour faire du automake
aussi, ... bref je suis un peu perdu. un petit coup de main serait le
bienvenue :)
Bonjour a tous,
j'aimerait utiliser (ou plutot je suis oblige d'utiliser) les autotools
pour compiler et distribuer un programme de type serveur modulaire et je
rencontre pas mal de problemes depuis le debut.
mon architecture de repertoire est la suivante:
...
donc j'ai suivi les indications de divers tutos expliquants que pour
compiler, je devais passer par autant de libs statiques que de sous
repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
...
que je link ensuite a mon main.o grace a la macro LDADD
Question 2) : mes modules doivent etre compiles en .so. ils se trouvent
dans un sous repertoire de src possedant l'architecture suivante:
./src/modules/mod1/ --> .cpp et .h du module1
./src/modules/mod2/ --> idem
./src/modules/modn/ --> idem
comment faire pour les compiler proprement ? (en .so). certains disent
qu'il faut du libtool, d'autres semblent partis pour faire du automake
aussi, ... bref je suis un peu perdu. un petit coup de main serait le
bienvenue :)
Bonjour a tous,
j'aimerait utiliser (ou plutot je suis oblige d'utiliser) les autotools
pour compiler et distribuer un programme de type serveur modulaire et je
rencontre pas mal de problemes depuis le debut.
mon architecture de repertoire est la suivante:
...
donc j'ai suivi les indications de divers tutos expliquants que pour
compiler, je devais passer par autant de libs statiques que de sous
repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
...
que je link ensuite a mon main.o grace a la macro LDADD
Question 2) : mes modules doivent etre compiles en .so. ils se trouvent
dans un sous repertoire de src possedant l'architecture suivante:
./src/modules/mod1/ --> .cpp et .h du module1
./src/modules/mod2/ --> idem
./src/modules/modn/ --> idem
comment faire pour les compiler proprement ? (en .so). certains disent
qu'il faut du libtool, d'autres semblent partis pour faire du automake
aussi, ... bref je suis un peu perdu. un petit coup de main serait le
bienvenue :)
Bonjour a tous,
j'aimerait utiliser (ou plutot je suis oblige d'utiliser) les autotools
pour compiler et distribuer un programme de type serveur modulaire et je
rencontre pas mal de problemes depuis le debut.
mon architecture de repertoire est la suivante:
...
donc j'ai suivi les indications de divers tutos expliquants que pour
compiler, je devais passer par autant de libs statiques que de sous
repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
...
que je link ensuite a mon main.o grace a la macro LDADD
Question 2) : mes modules doivent etre compiles en .so. ils se trouvent
dans un sous repertoire de src possedant l'architecture suivante:
./src/modules/mod1/ --> .cpp et .h du module1
./src/modules/mod2/ --> idem
./src/modules/modn/ --> idem
comment faire pour les compiler proprement ? (en .so). certains disent
qu'il faut du libtool, d'autres semblent partis pour faire du automake
aussi, ... bref je suis un peu perdu. un petit coup de main serait le
bienvenue :)
Le dimanche 1 avril 2007 15:36, Heyberger Ludovic a écrit:
> Bonjour a tous,
>
> j'aimerait utiliser (ou plutot je suis oblige d'utiliser) les autotools
> pour compiler et distribuer un programme de type serveur modulaire et j e
> rencontre pas mal de problemes depuis le debut.
>
> mon architecture de repertoire est la suivante:
>
> ...
>
> donc j'ai suivi les indications de divers tutos expliquants que pour
> compiler, je devais passer par autant de libs statiques que de sous
> repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
>
> ...
>
> que je link ensuite a mon main.o grace a la macro LDADD
C'est plutôt LIBADD dans ce cas je crois, et tu peux utiliser des
librairies
dynamiques.
>
> Question 2) : mes modules doivent etre compiles en .so. ils se trouvent
> dans un sous repertoire de src possedant l'architecture suivante:
> ./src/modules/mod1/ --> .cpp et .h du module1
> ./src/modules/mod2/ --> idem
> ./src/modules/modn/ --> idem
>
> comment faire pour les compiler proprement ? (en .so). certains disent
> qu'il faut du libtool, d'autres semblent partis pour faire du automake
> aussi, ... bref je suis un peu perdu. un petit coup de main serait le
> bienvenue :)
>
Automake/libtool gérent tout ça très bien, mais c'est pas évident à
utiliser.
La doc est éparpillée entre les pages info automake et libtool. L'id ée de
base, c'est de remplacer tes xxx_LIBRARIES par xx_LTLIBRARIES et
l'extension .a par .la. Il va alors automatiquement créer des librairie s
statiques et/ou dynamiques selon ce que veut l'utilisateur et ce qui est
possible sur la plate-forme.
libtool offre aussi un mécanisme pour gérer les modules externes et
plugins de
façon portable : libltdl (voir info libtool). Ca a l'air d'être ce qu e tu
cherches...
--
Cédric Lucantis
Le dimanche 1 avril 2007 15:36, Heyberger Ludovic a écrit:
> Bonjour a tous,
>
> j'aimerait utiliser (ou plutot je suis oblige d'utiliser) les autotools
> pour compiler et distribuer un programme de type serveur modulaire et j e
> rencontre pas mal de problemes depuis le debut.
>
> mon architecture de repertoire est la suivante:
>
> ...
>
> donc j'ai suivi les indications de divers tutos expliquants que pour
> compiler, je devais passer par autant de libs statiques que de sous
> repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
>
> ...
>
> que je link ensuite a mon main.o grace a la macro LDADD
C'est plutôt LIBADD dans ce cas je crois, et tu peux utiliser des
librairies
dynamiques.
>
> Question 2) : mes modules doivent etre compiles en .so. ils se trouvent
> dans un sous repertoire de src possedant l'architecture suivante:
> ./src/modules/mod1/ --> .cpp et .h du module1
> ./src/modules/mod2/ --> idem
> ./src/modules/modn/ --> idem
>
> comment faire pour les compiler proprement ? (en .so). certains disent
> qu'il faut du libtool, d'autres semblent partis pour faire du automake
> aussi, ... bref je suis un peu perdu. un petit coup de main serait le
> bienvenue :)
>
Automake/libtool gérent tout ça très bien, mais c'est pas évident à
utiliser.
La doc est éparpillée entre les pages info automake et libtool. L'id ée de
base, c'est de remplacer tes xxx_LIBRARIES par xx_LTLIBRARIES et
l'extension .a par .la. Il va alors automatiquement créer des librairie s
statiques et/ou dynamiques selon ce que veut l'utilisateur et ce qui est
possible sur la plate-forme.
libtool offre aussi un mécanisme pour gérer les modules externes et
plugins de
façon portable : libltdl (voir info libtool). Ca a l'air d'être ce qu e tu
cherches...
--
Cédric Lucantis
Le dimanche 1 avril 2007 15:36, Heyberger Ludovic a écrit:
> Bonjour a tous,
>
> j'aimerait utiliser (ou plutot je suis oblige d'utiliser) les autotools
> pour compiler et distribuer un programme de type serveur modulaire et j e
> rencontre pas mal de problemes depuis le debut.
>
> mon architecture de repertoire est la suivante:
>
> ...
>
> donc j'ai suivi les indications de divers tutos expliquants que pour
> compiler, je devais passer par autant de libs statiques que de sous
> repertoires necessaires a ma compile. j'ai donc les fichiers suivants:
>
> ...
>
> que je link ensuite a mon main.o grace a la macro LDADD
C'est plutôt LIBADD dans ce cas je crois, et tu peux utiliser des
librairies
dynamiques.
>
> Question 2) : mes modules doivent etre compiles en .so. ils se trouvent
> dans un sous repertoire de src possedant l'architecture suivante:
> ./src/modules/mod1/ --> .cpp et .h du module1
> ./src/modules/mod2/ --> idem
> ./src/modules/modn/ --> idem
>
> comment faire pour les compiler proprement ? (en .so). certains disent
> qu'il faut du libtool, d'autres semblent partis pour faire du automake
> aussi, ... bref je suis un peu perdu. un petit coup de main serait le
> bienvenue :)
>
Automake/libtool gérent tout ça très bien, mais c'est pas évident à
utiliser.
La doc est éparpillée entre les pages info automake et libtool. L'id ée de
base, c'est de remplacer tes xxx_LIBRARIES par xx_LTLIBRARIES et
l'extension .a par .la. Il va alors automatiquement créer des librairie s
statiques et/ou dynamiques selon ce que veut l'utilisateur et ce qui est
possible sur la plate-forme.
libtool offre aussi un mécanisme pour gérer les modules externes et
plugins de
façon portable : libltdl (voir info libtool). Ca a l'air d'être ce qu e tu
cherches...
--
Cédric Lucantis
Je viens de regler mon probleme de configuration des modules de cette
maniere la:
apt-get install libtool
configure.in :
(--) AC_PROG_RANLIB
(++) AC_PROB_LIBTOOL
et dans le Makefile.am d'un des modules:
lib_LTLIBRARIES = libname.la
libname_la_SOURCES =
header1.h
source1.cpp
header2.h
source2.cpp
libname_la_LDFLAGS = -version-info 1:0:0
INCLUDES = @/src/include
Par contre j'ai toujours le probleme au moment du load des modules qui ne
trouvent pas certains symbols qui seraient senses etre exportes par le co re
au moment de la compilation grace a un -Wl--export-dynamic
Je viens de regler mon probleme de configuration des modules de cette
maniere la:
apt-get install libtool
configure.in :
(--) AC_PROG_RANLIB
(++) AC_PROB_LIBTOOL
et dans le Makefile.am d'un des modules:
lib_LTLIBRARIES = libname.la
libname_la_SOURCES =
header1.h
source1.cpp
header2.h
source2.cpp
libname_la_LDFLAGS = -version-info 1:0:0
INCLUDES = -I@top_srcdir@/src/include
Par contre j'ai toujours le probleme au moment du load des modules qui ne
trouvent pas certains symbols qui seraient senses etre exportes par le co re
au moment de la compilation grace a un -Wl--export-dynamic
Je viens de regler mon probleme de configuration des modules de cette
maniere la:
apt-get install libtool
configure.in :
(--) AC_PROG_RANLIB
(++) AC_PROB_LIBTOOL
et dans le Makefile.am d'un des modules:
lib_LTLIBRARIES = libname.la
libname_la_SOURCES =
header1.h
source1.cpp
header2.h
source2.cpp
libname_la_LDFLAGS = -version-info 1:0:0
INCLUDES = @/src/include
Par contre j'ai toujours le probleme au moment du load des modules qui ne
trouvent pas certains symbols qui seraient senses etre exportes par le co re
au moment de la compilation grace a un -Wl--export-dynamic
Il y a une virgule ici: -Wl,--export-dynamic (je ne sais pas si c'est
obligatoire) mais pourquoi en as tu besoin?
aussi)
utilises tu ? (avec lt_dlopen?) Le makefile complet serait utile (si il n e
fait pas 15 pages :)
Il y a une virgule ici: -Wl,--export-dynamic (je ne sais pas si c'est
obligatoire) mais pourquoi en as tu besoin?
aussi)
utilises tu ? (avec lt_dlopen?) Le makefile complet serait utile (si il n e
fait pas 15 pages :)
Il y a une virgule ici: -Wl,--export-dynamic (je ne sais pas si c'est
obligatoire) mais pourquoi en as tu besoin?
aussi)
utilises tu ? (avec lt_dlopen?) Le makefile complet serait utile (si il n e
fait pas 15 pages :)
> 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 aidera it
> 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)
* 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 lisibilit e)
SUBDIRS = common
bindir = @prefix@/bin
bin_PROGRAMS = core
coredir = @prefix@/bin
core_SOURCES = main.cpp
core_LDADD = common/libcorecommon.a
INCLUDES =
@/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 = @/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 =
@/src/include
@/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?
> 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 aidera it
> 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)
* 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 lisibilit e)
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.la
mod1_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
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?
> 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 aidera it
> 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)
* 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 lisibilit e)
SUBDIRS = common
bindir = @prefix@/bin
bin_PROGRAMS = core
coredir = @prefix@/bin
core_SOURCES = main.cpp
core_LDADD = common/libcorecommon.a
INCLUDES =
@/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 = @/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 =
@/src/include
@/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?
Les modules ne devraient pas avoir à acceder au programme lui-même, m ais
seulement à la librairie corecommon. Si tu as des ressources globales
utilisables par les modules, elles doivent être fournies par la
librairies.
1) pour resoudre mon probleme de compilation et d'export-dynamic je
> pourrais passer par un Makefile.am dans ./src/core/ qui compilerait tou t
> mes fichiers (meme ceux qui sont dans des sous-repertoires) en une seul e
> fois. mais est-ce vraiment propre?
pas vraiment, c'est pas du tout l'esprit d'automake et tu aurais des
problèmes
avec les variables _SOURCES qui n'acceptent pas des fichiers venant d'un
autre repertoire.
Les modules ne devraient pas avoir à acceder au programme lui-même, m ais
seulement à la librairie corecommon. Si tu as des ressources globales
utilisables par les modules, elles doivent être fournies par la
librairies.
1) pour resoudre mon probleme de compilation et d'export-dynamic je
> pourrais passer par un Makefile.am dans ./src/core/ qui compilerait tou t
> mes fichiers (meme ceux qui sont dans des sous-repertoires) en une seul e
> fois. mais est-ce vraiment propre?
pas vraiment, c'est pas du tout l'esprit d'automake et tu aurais des
problèmes
avec les variables _SOURCES qui n'acceptent pas des fichiers venant d'un
autre repertoire.
Les modules ne devraient pas avoir à acceder au programme lui-même, m ais
seulement à la librairie corecommon. Si tu as des ressources globales
utilisables par les modules, elles doivent être fournies par la
librairies.
1) pour resoudre mon probleme de compilation et d'export-dynamic je
> pourrais passer par un Makefile.am dans ./src/core/ qui compilerait tou t
> mes fichiers (meme ceux qui sont dans des sous-repertoires) en une seul e
> fois. mais est-ce vraiment propre?
pas vraiment, c'est pas du tout l'esprit d'automake et tu aurais des
problèmes
avec les variables _SOURCES qui n'acceptent pas des fichiers venant d'un
autre repertoire.