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

C++ Discussion :

erreur lors de compilation avec ld


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut erreur lors de compilation avec ld
    Bonjour,
    Je compile un petit programme afin de tester un script pour ld. Le génération de mes .o se passent très bien. La génération du .exe me pose des problèmes si j'essaie de lier avec ld mais pas de problème si j'utilise g++.
    Pour être vraiment clair, voici les deux makefile utilisés :
    Celui qui fonctionne :
    all : exe

    exe : bonjour.o ouf.o manip.o
    g++ -o build/exe build/manip.o build/bonjour.o build/ouf.o

    manip.o :
    g++ -c manip.cpp -o build/$@

    bonjour.o :
    g++ -c bonjour.cpp -o build/$@

    ouf.o :
    g++ -c ouf.cpp -o build/$@

    clean :
    rm -f build/*
    Celui qui ne fonctionne pas :
    all : exe

    exe : bonjour.o ouf.o manip.o
    ld -o build/exe build/manip.o build/bonjour.o build/ouf.o

    manip.o :
    g++ -c manip.cpp -o build/$@

    bonjour.o :
    g++ -c bonjour.cpp -o build/$@

    ouf.o :
    g++ -c ouf.cpp -o build/$@

    clean :
    rm -f build/*
    Les erreurs retournées sont du style :
    build/manip.o:manip.cpp.text+0xd): undefined reference to `std::string::size() const'
    Je pense que le problème vient de librairies non trouvées mais je n'arrive pas à lui expliquer ce que je veux...

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Essaye d'ajouter -lstdc++ comme argument pour ld.

    MAT.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    C'est un peu mieux. Les erreurs provenant de la librairie std disparaisse mais j'ai encore des erreurs sur strcpy() et aussi beaucoup d'autres comme :
    build/manip.o:manip.cpp.text+0x124): undefined reference to `__main'
    /mingw/lib/libstdc++.a(globals_io.o):globals_io.cc.text+0xe): undefined reference to `__gthr_win32_mutex_init_function'

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Il faut utiliser g++ pas ld pour faire l'édition de liens (il y a potentiellement plus que les librairies à ajouter, mais par exemple aussi du code pour exécuter les constructeurs des variables globales).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Le but est de faire l'édition des liens avec ld afin d'utiliser un script. De plus, j'ai des sources C++ qui n'utilisent aucune librairie qui j'arrive à lier avec ld.
    J'ai essayé d'utiliser ld pour lier des .o écrits en C et j'ai le même problème : ld ne connaît pas la fonction printf() alors que l'édition des liens se passent très bien si elle est faite avec gcc.
    PS : le script ld que je veux utiliser est du style :
    SECTIONS {
    outputa 0x10000 :
    {
    all.o
    foo.o (.input1)
    }
    outputb :
    {
    foo.o (.input2)
    foo1.o (.input1)
    }
    outputc :
    {
    *(.input1)
    *(.input2)
    }
    }

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Tu peux passer les arguments que tu veux a ld quand tu utilises gcc/g++ pour faire l'edition de liens (de memoire, -Wl mais il vaut mieux verifier).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    L'option que j'utilise est -T nomfichier. Elle n'est pas prise en compte par ld.
    Pour compiler avec ld :
    ld -o output /lib/crt0.o hello.o -lc
    il faut donner le crt0.o d'après le manuel de ld. Fallait aller chercher loin en plus, j'avais la réponse devant les yeux
    Merci beaucoup pour vos réponses.

  8. #8
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

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

Discussions similaires

  1. [MAVEN][Debutant] Erreur lors de compilation
    Par jdvacheron dans le forum Maven
    Réponses: 15
    Dernier message: 06/07/2007, 13h28
  2. Pb de surlignage lors de compilation avec erreur
    Par cgone dans le forum Delphi
    Réponses: 4
    Dernier message: 07/11/2006, 15h38
  3. Win 98 Erreur lors du test avec mysqlshow
    Par minogttao dans le forum Débuter
    Réponses: 4
    Dernier message: 31/10/2006, 18h38
  4. erreur lors de connexion avec Database designer 4
    Par magic charly dans le forum Designer
    Réponses: 1
    Dernier message: 10/04/2006, 14h37
  5. Réponses: 6
    Dernier message: 21/11/2005, 13h40

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