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

Autres éditeurs Discussion :

[TCC] Problème de liaison avec les librairies, mais pas avec les fichiers objets


Sujet :

Autres éditeurs

  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 [TCC] Problème de liaison avec les librairies, mais pas avec les fichiers objets
    Buena note,

    Je rencontre un problème étrange avec TCC (s'il y en a qui l'utilise).

    Il ne parvient pas à lier avec un librairie généré avec ar, alors qu'il parvient à lier normalement si on lui fourni directemet les fichiers objets.

    je donne un exemple simplifié, avec deux fichiers source.

    le fichier a.c
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <stdio.h>
    extern char* text();
    int main(void)
    {
        printf("\nText: %s\n", text());
       return 0;
    }

    le fichier b.c
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char* text(void)
    {
        return "petit bout de texte";
    }

    Si je fais ensuite
    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tcc -c -o b.o b.c
    ar -r libtest.a b.o
    tcc "-I..\include" "-L..\lib" "-L." -ltest a.c
    TCC me renvoit le message, "undefined symbol 'text' "

    Mais si je fais
    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tcc -c -o b.o b.c
    tcc "-I..\include" "-L..\lib" "-L." b.o a.c
    alors ça marche.

    Comment expliquer cela ?

    J'ai vérifié le format de la librairie avec objdump, et elle semble Ok. Mais j'ai remarqué tout de même que les librairies fournies d'origine avec TCC contiennent des fichiers objet au format PE, alors que TCC ne produit que du ELF. Et ma librairie est au format ELF.

    Mais je serais surpris que TCC exigent que les module dans les librairies soit au format PE... ce serait étrange.

    Si quelqu'un a une idée, ou si c'est la manière de créer la librairie qui n'est pas convenable...

    Je donne en tous cas un exemple de la librairie en pièce jointe, au cas où quelqu'un(e) y découvre quelque chose qui ne va pas.
    Fichiers attachés Fichiers attachés
    ------------------------------------------------------------
    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
    Je suis abonné à me faire des réponses à moi-même..... alors je ne change pas cette habitude.

    J'ai trouvé la solution : il faut construire la librairie en ajoutant le commutateur "S" à l'invocation de ar.

    L'option "S" (majuscule) demande à ar de ne pas créer de table des symboles (do not build a symbol table).

    J'ignore vraiment pourquoi, et il faudra que je me renseigne sur ce qu'est exactement cette table des symboles, parce qu'elle n'est peut-être pas ce que j'imaginais.

    Donc pour construire une librairie qui fonctionne avec le lieur interne de TCC, il faut faire

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    ar -rS libmachin.a objet1.o objet2.o ...

    Résolu J'suis content
    ------------------------------------------------------------
    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 ]
    ------------------------------------------------------------

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

Discussions similaires

  1. Session ok avec PHP 5 mais pas avec PHP 6
    Par ceweb dans le forum Langage
    Réponses: 5
    Dernier message: 23/07/2009, 16h10
  2. Réponses: 7
    Dernier message: 19/02/2008, 15h30
  3. Mon script fonctionne avec un bouton, mais pas avec l'image!
    Par julien.63 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/04/2006, 16h26
  4. CSS : Bordure sur les liens mais pas sur les images ?
    Par monstroplante dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 04/02/2006, 14h18
  5. [CSS] border-collapse sur les TR mais pas sur les TD.
    Par hpfx dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 03/04/2005, 16h16

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