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 :

[GNAT] Conflit entre deux fichiers objets externes


Sujet :

Ada

  1. #1
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut [GNAT] Conflit entre deux fichiers objets externes
    Hi every body :p

    J'ai un projet dans lequel j'ai un librairie L, et un fichier objet O, comme éléments externes entrant dans le processus de liaison. La librairie L défini une variable V. Le fichier objet O, est le produit de la compilation d'un code source, qui déclare V comme étant une variable externe tout en l'initialisant.

    Le problème est qu'à la liaison avec Gnat, j'ai un message d'erreur me disant que V qui est défini dans O, est aussi défini dans un élément de L.

    Pour intégrer O et L au projet, j'utilise la pragma Linker_Options. Gnat est basé sur GCC, et donc sur son LD. J'ai fait des essais en GCC pure, et il n'y a pas de problèmes. Peut-être qu'en compilant avec Gnat, LD ne reçoit pas ses argument dans le bon ordre ? (O doit être normalement passé avant L).

    Est-ce qu'il y a un moyen avec Gnat, de forcer l'ordre dans lequel les fichiers objets et librairie externe seront liés ?

    Note : je me demande aussi, quand on déclare dans un fichier C, une variable externe, en l'initialisant... est-ce que le compilateur laisse dans le fichier objet, des informations d'initialisation pour la dite-variable qui se trouve dans un autre fichier objet, ou est-ce qu'il cré vraiment une instance supplémentaire de cette variable ? (auquel dernier cas, ce serait vraiment embêtant)
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  2. #2
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Deux options de gnatlink qui peuvent êtres utiles (options pouvant aider à établire un diagnostique)

    • -K : Output linker options to stdout. Includes library search paths, contents of pragmas Ident and Linker_Options, and libraries added by gnatbind.
    • -1 (chiffre 1) : Output chosen elaboration order. The output is written to stdout.


    Ces options peuvent êtres passées à gnatmake, c'est à dire à gnat tout court.

    Pour l'option K, c'est bien sure des options passées à LD (environnement GCC) dont il s'agit.

    Pour bien utiliser les informations fournies par l'option l, il faut savoir que l'ordre de liaison est l'ordre inverse de l'ordre d'élaboration (je posterai plus tard la référence sur ce point, quand je l'aurai retrouvé)

    Ces deux options ne peuvent êtres passées qu'à gnatlink et j'ignore encore comment les faire passer à gnatlink par l'intermédaire de gnatmake.

    Source : Gnat user's guide for native platforms @ geophysics.rice.edu
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  3. #3
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Le problème est résolu. Il y avait en fait dans le code, plusieurs déclaration d'inclusion de unicows. En effet, il me semblait qu'il était plus clair d'ajouter la clause d'inclusion de cette dll, aprés chaque déclaration de fonction/procédure importée. Ainsi, me disais-je, aprés pour chaque importation, on sait d'où vient la fonction/procédure. Malheureusement, comme je ne déclarait l'inclusion de unicode_api_loader qu'à un seul endroit (car cette inclusion est préparation à l'inclusion de unicows, qui elle accompagnait à mon avis chaque importation), il n'était pas évident que unicode_api_loader apparaissait avant unicows (comme le doit ce module).

    Il est donc préférable de n'avoir qu'une seule déclaration d'inclusion pour chaque dll ou fichier objet. Ainsi, l'odre de liaison est prévisible. On pourra éventuellement accompagner chaque importation d'un commentaire, afin de renseigner sa provenance.

    Je disais précédement que l'ordre de liaison des unités de compilation Ada avec Gnat, est l'inverse de l'ordre de réalisation de ces unités. Mais au sein d'une unité de compilation, l'odre des déclaration d'inclusion de dll ou de module objet, ne change pas. C'est important de le noter. Par exemple même si deux unités A et B, sont réalisées dans l'ordre [A,B] et qu'elle sont donc liées dans l'odre [B,A]... si l'unité A déclare par exemple « Linker_Options("-lmylib1"); Linker_Options("-lmylib2"); » alors l'ordre de laison pour ces inclusions restera bien [mylib1, mylib2].

    Note sur le topic précédent : Les options -K et -1 ne sont apparement reconnues que la gnatlink, et non pas par gnatmake. J'ignore pour le moment comment les passer à gnatlink par l'intermédiaire de gnatmake
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  4. #4
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    Note sur le topic précédent : Les options -K et -1 ne
    sont apparement reconnues que la gnatlink, et non pas
    par gnatmake. J'ignore pour le moment comment les passer
    à gnatlink par l'intermédiaire de gnatmake
    essayez le paramètre -largs

    gnatmake toto.adb -largs -K

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

Discussions similaires

  1. Conflit entre deux fichiers js
    Par carcara dans le forum jQuery
    Réponses: 3
    Dernier message: 20/05/2015, 19h51
  2. Conflit entre deux fichiers
    Par BRUNO71 dans le forum jQuery
    Réponses: 2
    Dernier message: 13/08/2012, 20h59
  3. Réponses: 1
    Dernier message: 13/08/2009, 12h12
  4. [EXCEL] difference entre deux fichiers
    Par Mokhtar BEN MESSAOUD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/01/2006, 11h12
  5. [langage] Passage d objet entre deux fichiers
    Par Slippers dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2005, 14h45

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