2012-02-10 3 views
2

у меня есть очень простая программа для печати под названием «print.c»:Использование стандарта C99 вызывает ошибки компилятора GCC

#include <stdio.h> 

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

Compiling с командой 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/is/is/and you're good. –

+0

@RichardPennington: OP * хочет, чтобы 'print' интерпретировался как аргумент' -o' (имя выходного файла), но это не так, поэтому вместо этого он интерпретируется как входной файл. – caf

+0

@cat Моя ошибка. –

4

Команда должна быть gcc -o print -std=c99 print.c Параметр -o указывает, что следующий токен является выходным файлом.

+0

Да, установил ее. Извините, что я довольно новичок в C – Strogenstroff

1

Используйте эту командную строку:

Смежные вопросы