2009-11-22 4 views
0

Je possède ce projet que je compile avec la commande suivante:qu'est-ce qui ne va pas avec mon makefile?

g++ ALE.cpp -lncurses 

Cela me donne a.out fichier. J'ai le Makefile suivant, mais il semble ne pas être édité correctement.

HEADERS = LinkedListNode.h LinkedList.h Classes.h GUI.h Functions.h 

default: ale 

ale.o: ALE.cpp $(HEADERS) 
    g++ -c ALE.cpp -o ale.o -lncurses 

ale: ale.o 
    g++ ale.o -o ale 

clean: 
    -rm -f ale.o 
    -rm -f ale 

erreurs je reçois:

g++ ale.o -o ale 
ale.o: In function `_start': 
(.text+0x0): multiple definition of `_start' 
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.text+0x0): first defined here 
ale.o:(.rodata+0x0): multiple definition of `_fp_hw' 
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.rodata+0x0): first defined here 
ale.o: In function `_fini': 
/build/buildd/glibc-2.8~20080505/build-tree/glibc-20080505/csu/../sysdeps/generic/initfini.c:109: multiple definition of `_fini' 
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o:/build/buildd/glibc-2.8~20080505/build-tree/glibc-20080505/csu/../sysdeps/generic/initfini.c:109: first defined here 
ale.o:(.rodata+0x4): multiple definition of `_IO_stdin_used' 
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.rodata.cst4+0x0): first defined here 
ale.o: In function `__data_start': 
(.data+0x0): multiple definition of `__data_start' 
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.data+0x0): first defined here 
ale.o: In function `__data_start': 
(.data+0x4): multiple definition of `__dso_handle' 
/usr/lib/gcc/i486-linux-gnu/4.3.2/crtbegin.o:(.data+0x0): first defined here 
ale.o: In function `_init': 
/build/buildd/glibc-2.8~20080505/build-tree/i386-libc/csu/crti.S:15: multiple definition of `_init' 
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o:/build/buildd/glibc-2.8~20080505/build-tree/i386-libc/csu/crti.S:15: first defined here 
/usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__' 
ale.o:(.dtors+0x4): first defined here 
/usr/bin/ld: warning: Cannot create .eh_frame_hdr section, --eh-frame-hdr ignored. 
/usr/bin/ld: error in ale.o(.eh_frame); no .eh_frame_hdr table will be created. 
collect2: ld returned 1 exit status 
make: *** [ale] Error 1 
+0

Lecture utile: http://www.gnu.org/software/make/manual/make.html#Implicit-Variables –

Répondre

3

Qu'est-ce qui se passe si vous déplacez -lncurses dans la règle ale:, à savoir

ale.o: ALE.cpp $(HEADERS) 
    g++ -c ALE.cpp -o ale.o 

ale: ale.o 
    g++ ale.o -o ale -lncurses 
+0

hmmm pas n'a pas fonctionné. – user69514

+0

Assurez-vous de nettoyer avant d'essayer les modifications suggérées. –

1

Comme foxcub a dit que vous fournissez une option de liaison à une compilation seule commande (non nécessaire) et aucune option de lien (-lncurses) pour générer la commande exécutable là où elle est réellement nécessaire.

2

Cela n'a aucun sens d'utiliser -l lors de la compilation d'un fichier objet. Utilisez-le uniquement lorsque vous liez votre application.

Donc, vous devez déplacer -lncurses de la ligne 6 à la ligne 9.

Questions connexes