我刚刚开始学习C作为一种爱好。我正在使用“C编程:现代方法”一书。那里有一个名为pun.c
的第一个程序。这是代码:
#include <stdio.h>
int main(void)
{
int int_figure;
float float_figure;
int_figure = 12;
float_figure = 12.0;
printf("To C or not to C, this is a question\n");
printf("%d\n", int_figure);
printf("%.2f\n", float_figure);
return 0;
}
实际上并不重要,因为我要问的问题与.c
的任何gcc
文件编译相同。
因此在本书中有gcc
的一些选项允许在编译期间发现错误。其中一个是-Wall
,另一个是-pedantic
。因此,当我使用此选项编译文件时,终端中的输出如下:
nickdudaev|c $ gcc -o -Wall pun pun.c
pun: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/../../../../lib/crti.o:(.fini+0x0): first defined here
pun: In function `data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/../../../../lib/crt1.o:(.data+0x0): first defined here
pun: In function `data_start':
(.data+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/crtbegin.o:(.data+0x0): first defined here
pun:(.rodata+0x0): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/../../../../lib/crt1.o:(.rodata.cst4+0x0): first defined here
pun: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/../../../../lib/crt1.o:(.text+0x0): first defined here
pun: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/../../../../lib/crti.o:(.init+0x0): first defined here
/tmp/cc2TRR93.o: In function `main':
pun.c:(.text+0x0): multiple definition of `main'
pun:(.text+0xf6): first defined here
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__'
pun:(.data+0x10): first defined here
/usr/bin/ld: error in pun(.eh_frame); no .eh_frame_hdr table will be created.
collect2: error: ld returned 1 exit status
该程序虽然运行正常。
nickdudaev|c $ ./pun
To C or not to C, this is a question
12
12.00
所以问题。
我试图搜索Google,但我发现的唯一内容是对gcc
选项的描述。但没有关于可能的输出以及如何处理它。
答案 0 :(得分:3)
此:
gcc -o -Wall pun pun.c
看起来不正确。你说的是-Wall
你应该说出输出的名称,即-o
的参数。
尝试:
gcc -Wall -o pun pun.c
基本上你将pun
(旧二进制文件)作为源文件提供给gcc。
答案 1 :(得分:1)
-o
中的gcc
选项用于指定自定义输出文件名,否则
如果未指定
-o
,则默认为将可执行文件放入a.out
。
推荐格式为-o file
。 -o
之后的下一个预期参数是文件名,而不是另一个开关。有关详细信息,请参阅online manual。
您应该将编译语句重写为
gcc -o pun pun.c -Wall