2009-11-22 96 views
0

我有這個項目,我用下面的命令編譯:我的makefile有什麼問題?

g++ ALE.cpp -lncurses 

這給了我a.out文件。我有以下的Makefile,但似乎沒有正確編輯。

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 

錯誤,我得到:

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

有用的書:http://www.gnu.org/software/make/manual/make.html#Implicit-Variables – 2009-11-22 02:42:01

回答

3

如果移動-lncurses到ale:規則會發生什麼情況,即

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

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

嗯無沒有工作。 – user69514 2009-11-22 02:34:19

+0

請務必在嘗試建議的更改之前清理乾淨。 – 2009-11-22 03:03:45

1

就像foxcub說你提供了一個鏈接器選項編譯只有命令(不需要)和沒有鏈接器選項(-lncurses)才能在實際需要的地方生成可執行的命令。

2

在目標文件編譯期間使用-l是沒有意義的。只有當你連接你的應用程序時才使用它。

所以,你必須從第6行移動-lncurses到線9