2012-02-10 96 views
2

我有一個名爲「print.c」一個非常簡單的打印程序:使用C99標準導致GCC編譯器錯誤

#include <stdio.h> 

int main(void){ 
     printf("Random words"); 
} 

用命令gcc -o print print.c編譯導致一個完全乾淨的編譯和可執行文件運行符合預期。

用命令gcc -o -std=c99 print print.c編譯給我:

print: In function `_fini': 
(.fini+0x0): multiple definition of `_fini' 
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crti.o:(.fini+0x0): first defined here 
print: In function `__data_start': 
(.data+0x0): multiple definition of `__data_start' 
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o:(.data+0x0): first defined here 
print: In function `__data_start': 
(.data+0x4): multiple definition of `__dso_handle' 
/usr/lib/gcc/i686-linux-gnu/4.6.1/crtbegin.o:(.data+0x0): first defined here 
print:(.rodata+0x4): multiple definition of `_IO_stdin_used' 
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here 
print: In function `_start': 
(.text+0x0): multiple definition of `_start' 
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o:(.text+0x0): first defined here 
print:(.rodata+0x0): multiple definition of `_fp_hw' 
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o:(.rodata+0x0): first defined here 
print: In function `_init': 
(.init+0x0): multiple definition of `_init' 
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crti.o:(.init+0x0): first defined here 
/tmp/ccfvqWMW.o: In function `main': 
print.c:(.text+0x0): multiple definition of `main' 
print:(.text+0xb4): first defined here 
/usr/lib/gcc/i686-linux-gnu/4.6.1/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__' 
print:(.dtors+0x4): first defined here 
/usr/bin/ld: error in print(.eh_frame); no .eh_frame_hdr table will be created. 
collect2: ld returned 1 exit status 

有誰知道如何解決這一問題?

回答

10

print不被解釋爲參數的-o選項,因此它試圖從第一編譯重新鏈接print可執行文件。這包括許多複製其他嘗試鏈接的符號的符號,因此會出現錯誤。

嘗試,而不是:

gcc -std=c99 -o print print.c 

或更好:

gcc -std=c99 -Wall -g -O -o print print.c 
+0

s /不是/是/你很好。 – 2012-02-10 02:41:51

+0

@RichardPennington:OP *希望* print'被解釋爲'-o'(輸出文件名)的參數,但它不是 - 所以它被解釋爲輸入文件。 – caf 2012-02-10 02:48:21

+0

@cat我的錯誤。 – 2012-02-10 02:53:06

4

該命令應該是gcc -o print -std=c99 print.c -o參數指定下一個標記是輸出文件。

+0

是啊,固定它。對不起,我很新C – Strogenstroff 2012-02-10 02:40:10

1

使用此命令行: