IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Problème liaison C/C++ avec PLUSIEURS libs so ADA


Sujet :

Ada

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème liaison C/C++ avec PLUSIEURS libs so ADA
    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!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 114
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Essaie peut-être de linker ensemble tes 2 librairies Ada, que tu linkeras avec ton appli C++ ...
    Personnellement, j'ai plus l'habitude de faire le contraire (C vers ADA) donc ce n'est qu'une suggestion.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    ça y est ! j'ai trouvé .. (et ce n'était pas très compliqué).

    L'ERREUR :

    les deux libs ada avaient exactement le même nom de version! .. Par conséquent, vis-à-vis de ld, les deux libs étaient là même.. il y trouvait donc les symboles de l'une ou l'autre, selon l'ordre d'inclusion.


    COMMENT J'AI TROUVE:

    En fait, je n'arrivais plus à faire tourner le C++ avec l'une des libs, ..(lookup symbol error au chargement) (libA). Et faisant ldd sur le binaire j'avais : versionlib => libB !! (alors que j'avais bien linké avec la libA).

    Merci à tous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème "overlaps with VirtualHost" avec plusieurs VHost
    Par catapicultrophe dans le forum Apache
    Réponses: 2
    Dernier message: 27/10/2014, 11h59
  2. Problème boucle WHILE/WEnd avec plusieurs conditions
    Par Romanaxx dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/12/2013, 15h00
  3. Problème de background-image avec plusieurs divs et z-index
    Par thomas-g dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 21/11/2010, 18h49
  4. Problème de requête MYSQL avec plusieurs limit
    Par Super_baloo8 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/05/2007, 18h35
  5. [XP Pro]Problème avec plusieurs profils utilisateurs sur PC
    Par marsup54 dans le forum Windows XP
    Réponses: 8
    Dernier message: 27/04/2005, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo