2009-11-22 87 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