2015-04-01 55 views
-1
gcc -c x.c 

告诉编译器从x.c文件创建目标代码,而不是试图链接它的权利?gcc中的-o选项是什么?

什么-o选项告诉编译器在

gcc a.o y.o -o x.out 

而其他的问题,我有,当我有一个源代码,如:

#include <stdio.h> 

int main(){ 
    puts(""); 
} 

好了好了,编译器知道到哪里寻找stdio.h中,但可执行文件必须链接到标准输入。不是吗? stdio.o驻留在哪里?

+2

我不认为这是第一次有人问这个。 – 2015-04-01 18:53:18

+0

@iharob你能发布一个链接吗? – 2015-04-01 18:53:58

+2

我搜查了,没有找到重复。但是下面的答案没问题,我想这是低估的,因为人们认为你应该不用'gcc --help'并且看看每个选项是什么,你不这么认为吗? – 2015-04-01 18:54:12

回答

2

请参阅manpages.info/linux/gcc.1.html。在简介部分下,您将看到-o选项。

关于

好了好了,编译器知道到哪里寻找stdio.h,但可执行文件必须链接到stdio.o不是吗? stdio.o在哪里?

第一个问题的答案是“否”。由于第一个问题的答案是“否”,所以第二个问题是不相关的。

stdio.h中声明的函数和变量不必在stdio.o中。它们通常位于链接器查找库文件的其中一个目录中的库(.a.so)中。

一般来说,没有规定每个.h文件都有对应的.o文件。可以在.h文件中声明的函数和变量在多个.c文件中实现,这将导致多个.o文件。也可以在多个.h文件中声明的函数和变量在一个.c文件中实现。这些组织方式因项目而异。

每个.c文件,在另一方面,有一个相应的.o文件(我还没有看到有多个.c文件可以被编译为创建一个.o文件中的任何平台)。编译.c文件产生的所有.o文件都链接在一起以创建可执行文件。

+0

我看,非常感谢。 – 2015-04-01 19:10:53

2

,指示输出文件,也就是你的目标文件或可执行文件应该是什么,真的是你可以通过做gcc --helpman gcc

<stdio.h>是标准库的一部分,看到这个信息,你的编译器已经连接至。

1
gcc -o [file] 

将构建输出写入输出文件。这不是与优化级别的-O相混淆。我不相信这个选项与链接有关。