Bonjour,

Voila je suis confronté un assez gros problème. Et j'ai beau chercher sur le net et les documentations diverses, je ne trouve aucune solution.

CONTEXTE :
J'ai d'un côté une application en C++ (mais les exports/imports je les faits en C (ex : extern "C" fonction_ada)). Cette application est mon "main".

De cette application je fait appel à des fonctions écrites en ADA dans une librairie externe. Cette librairie est dynamique ( .so ) et les fonctions appelées sont compilées avec le pragma export(c,ma_fonction). Cette lib fait appel à des fonctions présentes dans le code c++ précédemment décrit. (pragma import(c,fonction)...

Le link du prog. C++ avec cette lib se passe très bien , ainsi que son exécution.

PROBLEME :

Maintenant, si je fait une deuxième lib ada qui possède les même caractéristiques que la première mais n'a strictement rien à voir (e.g. aucune référence de l'une vers l'autre). Le link du c++ avec les DEUX libs ne passe pas!. (ps, avec chacune d'entre elles de façon individuelle ça marche très bien).

SYMPTOMES:

- undefined reference vers les fonctions de l'une , ou l'autre selon l'ordre de prise en compte par le linker ( -llib1, -llib2, ou l'inverse).

PISTES (ou non pistes) :

- ce n'est pas un problème de chemin car il trouve bien les libs, ce n'est pas la redifinition d'un symbole dans l'une ou l'autre car il ne le dis pas.

- un "nm" sur les libs concernées me montre bien que les symboles "indéfinis" sont effectivement bien définits dans les dites libs.

- Je fait selon la documentation GNAT des librairies "Standalone", pour lesquelles je n'ai pas besoin de faire appel à adainit() et adafinalize(), il y aurait -il un souci avec cela?? Double référence à adainit()/finalize()?
Je compile mes libs de façon standar avec un fichier projet gnat et les paramètres standar: library_kind ("dynamic")..

- Le code C++ est compilé avec un gcc 4.1.2 standar c'est la même version que le gnatgcc (je suis sous ubuntu, donc à priori les versions sont compatibles entre elles).

- Le link est fait avec gcc de façon standar (le main est dans le C++), et j'inclue les libs qui vont bien (-L/chemin -llibada1 -llibada2).

Voila, je ne sais pas quoi dire d'autre.. j'ai souvent eut des problèmes de link où l'ordre des inclusions importait (intérdépendances oblige), mais ici ce n'est pas le cas!! ..

Dans la documentation gnat ils ne parlent pas de cette histoire d'appel à adainit dans le cadre de link avec plusieurs librairies ada.. surtout si cet appel n'est pas nécessaire car la librairie est "standalone".. (dynamique avec une liste d'interfaces).

Merci beacoup pour votre aide.. et bonne soirée à tous!