threads et librairies dynamiques
Bonjour à tous,
Un petit post pour vous expliquer mon problème du moment qui commence à sérieusement me tordre le cerveau.
Je suis entrain de réalisé un programme qui est découpé comme ceci :
J'ai un programme principal qui se charge de créer deux threads et de les lancer. Ces deux threads sont sensées simulées un système de navigation complexe. Chaque thread ouvre une librairie dynamique (dlopen, dlsym) et lance la fonction principale grâce au symbole récupéré.
Travaillant à la base sous Solaris (donc UNIX), mes variables globales étaient déclarées dans mon programme principal. Dans mes librairies dynamiques, elles étaient déclarées en "extern". Quand je regardais le symbole d'une de ces variables, ça me donnait (pour une des libraires et pour mon prog principal) :
> nm lib1.so | grep SYMBOL_A
U SYMBOL_A
> nm MON_PROG | grep SYMBOL_A
002e88f0 B SYMBOL_A
De cette façon, je n'avais aucun problème lors de l'exécution.
Je suis passé depuis sous Linux (fedora core 6). Je recompile, je recréé mes librairie. Seulement dorénavant, mon programme plante et me ressort un "undefined symbol SYMBOL_A" sachant que tout est fait de la même façon.
Pour info mes librairies sont créés comme ceci :
ld -g -G -ashared -Bdynamic --export-dynamic -o lib1.so MA_LISTE_DE_.a -lm
Je compile avec ces options : -g -D_REENTRANT -lpthread -lrt -ldl -lgcc_s
Je bute un peu là-dessus et c'est vraiment dommage car je n'avais aucun souci auparavant. Y a t'il une option qui aurait bougé entre Linux et UNIX sur l'edition de mes liens ? Je cherche désespérement une piste.