Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de linkage avec g++

Sujet résolu
    18 juillet 2007 à 19:39:13

    Bonjour :) ,

    Voilà, je me remet au C++ car je dois utiliser Qt. Cependant, en faisant un petit programme de test pour voir si je n'avais rien perdu, j'ai remarqué qu'il y a un problème que je comprend pas. Voici le Makefile :
    # makefile

    CC = g++
    CFLAGS = -Wall -ansi -O3
    OBJ = main.o
    EXE = programme_test

    all: $(EXE)

    $(EXE): $(OBJ)
            $(CC) $(OBJ) -o $(EXE) $(CFLAGS)

    main.o: main.cpp
            $(CC) -c main.cpp -o main.o $(CFLAGS)

    clean:
            rm -rf $(OBJ) $(EXE)

    Mais voici ce que j'obtiens lors du make :



    $ make
    g++ main.cpp -o main.o -Wall -ansi
    g++ main.o -o programme_test -Wall -ansi
    main.o:(.rodata+0x0): définitions multiples de « _fp_hw »
    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o:(.rodata+0x0): défini pour la première fois ici
    main.o: dans la fonction « __data_start »:
    (.data+0x4): définitions multiples de « __dso_handle »
    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/crtbegin.o:(.data+0x0): défini pour la première fois ici
    main.o: dans la fonction « _init »:
    /var/tmp/portage/sys-libs/glibc-2.5-r4/work/build-default-i686-pc-linux-gnu-nptl/csu/crti.S:36: définitions multiples de « _init »
    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o:/var/tmp/portage/sys-libs/glibc-2.5-r4/work/build-default-i686-pc-linux-gnu-nptl/csu/crti.S:36: défini pour la première fois ici
    main.o: dans la fonction « _start »:
    (.text+0x0): définitions multiples de « _start »
    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o:(.text+0x0): défini pour la première fois ici
    main.o: dans la fonction « _fini »:
    /var/tmp/portage/sys-libs/glibc-2.5-r4/work/build-default-i686-pc-linux-gnu-nptl/csu/crti.S:52: définitions multiples de « _fini »
    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o:/var/tmp/portage/sys-libs/glibc-2.5-r4/work/build-default-i686-pc-linux-gnu-nptl/csu/crti.S:52: défini pour la première fois ici
    main.o:(.rodata+0x4): définitions multiples de « _IO_stdin_used »
    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o:(.rodata.cst4+0x0): défini pour la première fois ici
    main.o: dans la fonction « __data_start »:
    (.data+0x0): définitions multiples de « __data_start »
    /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o:(.data+0x0): défini pour la première fois ici
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [programme_test] Erreur 1


     


    Si quelqu'un à une idée du problème, merci. :)

    GarulfoUnix.
    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2007 à 9:36:14

      Tu a oublié le flag "-c" dans la compilation de ton fichier objet (main.o), ce flag permet de demander à gcc/g++ de ne pas linker et de donc compiler en code intermédiaire le fichier, pour que tout soi linké en même temps à la fin.
      Or, sans ce flag, gcc va créer un exécutable à partir de main.cpp, appelé "main.o", ce qui ne correspond surement pas à ce que tu veux faire :) .
      • Partager sur Facebook
      • Partager sur Twitter
        20 juillet 2007 à 9:58:02

        Ha merde j'ai oublié de prévenir que c'était réglé.
        En faite le problème était que lorsque je modifiais le Makefile, les modifs sur le fichiers ne s'enregistrer pas malgré qu'Emacs me disais "Wrote to...ect" . Avec un coup de redémarrage d'Emacs pour le faire partir sur le bon pied, ça a marché.
        • Partager sur Facebook
        • Partager sur Twitter

        Problème de linkage avec g++

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown