2012-02-10 95 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

使用此命令行: