这个问题已经在这里有一个答案:
gcc -c x.c
告诉编译器创建一个从x.c文件的对象代码,而不是试图链接,不是吗?
什么是-o
选项告诉编译器在下面?
gcc a.o y.o -o x.out
而其他的问题,我有,当我的源代码,如:
#include <stdio.h>
int main(){
puts("");
}
那么OK,编译器知道到哪里寻找stdio.h
,但可执行文件必须链接到stdio.o
,一定不是吗?在什么地方stdio.o
文件驻留?
见manpages.info/linux/gcc.1.html。根据剧情简介部分,您将看到-o
选项。
关于
那么OK,编译器知道到哪里寻找
stdio.h
,但可执行文件必须链接到stdio.o
,一定不是吗?在什么地方stdio.o
文件驻留?
回答第一个问题是“否”。由于回答的第一个问题是“否”,第二个问题是不相关的。
在stdio.h
声明的函数和变量不必是stdio.o
。它们通常是在其中在链接器查找库文件的目录中发现了一个库(.a
或.so
)。
在一般情况下,没有每个.h
文件有对应的.o
文件规则。它可能有一个.h
文件中声明在多个.c
文件将导致多个.o
文件中实现的函数和变量。也可能有功能,并在多个.h
文件中声明的变量在一个.c
文件来实现。如何将这些被组织根据项目的不同而不同。
每个.c
文件,在另一方面,有一个相应的.o
文件(我还没有看到有多个.c
文件可以被编译为创建一个.o
文件中的任何平台)。所有的编译.o
文件造成的.c
文件链接在一起以创建可执行文件。
它表示输出文件,即你的目标文件或可执行文件应该是什么。你可以看到通过做gcc --help
或man gcc
此信息。
<stdio.h>
是标准库,你的编译器已经链接到的一部分。
gcc -o [file]
写入生成输出到输出文件。这不是与-O这是优化级别相混淆。我不相信这个选项有什么关系联系起来。