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驻留在哪里?
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驻留在哪里?
请参阅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
文件都链接在一起以创建可执行文件。
我看,非常感谢。 – 2015-04-01 19:10:53
,指示输出文件,也就是你的目标文件或可执行文件应该是什么,真的是你可以通过做gcc --help
或man gcc
<stdio.h>
是标准库的一部分,看到这个信息,你的编译器已经连接至。
gcc -o [file]
将构建输出写入输出文件。这不是与优化级别的-O相混淆。我不相信这个选项与链接有关。
我不认为这是第一次有人问这个。 – 2015-04-01 18:53:18
@iharob你能发布一个链接吗? – 2015-04-01 18:53:58
我搜查了,没有找到重复。但是下面的答案没问题,我想这是低估的,因为人们认为你应该不用'gcc --help'并且看看每个选项是什么,你不这么认为吗? – 2015-04-01 18:54:12