GCC 中的 -o 选项是什么?
What is the -o option in GCC?
gcc -c x.c
告诉编译器从 x.c 文件创建目标代码,而不是尝试 link 它,对吗?
-o
选项告诉编译器什么,如下所示?
gcc a.o y.o -o x.out
我的另一个问题是,当我有这样的源代码时:
#include <stdio.h>
int main(){
puts("");
}
好吧,编译器知道在哪里寻找 stdio.h
,但是可执行文件必须 linked 到 stdio.o
,不是吗? stdio.o
文件位于何处?
它表示输出文件,即您的目标文件或可执行文件应该是什么。您可以通过执行 gcc --help
或 man gcc
.
查看此信息
<stdio.h>
是标准库的一部分,您的编译器已经链接到它。
gcc -o [file]
将构建输出写入输出文件。这不要与优化级别 -O 混淆。我不认为此选项与链接有任何关系。
参见 manpages.info/linux/gcc.1.html。在 Synopsis 部分下,您将看到 -o
选项。
关于
Well OK, the compiler knows where to look for stdio.h
, but the executable must be linked to stdio.o
, mustn't it? Where does the stdio.o
file reside?
第一个问题的答案是"No"。由于第一个问题的答案是"No",所以第二个问题不相关。
在stdio.h
中声明的函数和变量不必在stdio.o
中。它们通常位于库(.a
或 .so
)中,该库位于链接器查找库文件的目录之一中。
一般来说,没有规定每个.h
文件都有对应的.o
文件。可以在多个 .c
文件中实现在 .h
文件中声明的函数和变量,这将导致多个 .o
文件。也可以让在多个 .h
文件中声明的函数和变量在一个 .c
文件中实现。这些组织方式因项目而异。
另一方面,每个 .c
文件都有一个对应的 .o
文件(我还没有看到任何平台可以编译多个 .c
文件来创建一个 .o
文件)。编译 .c
文件产生的所有 .o
文件都链接在一起以创建可执行文件。
gcc -c x.c
告诉编译器从 x.c 文件创建目标代码,而不是尝试 link 它,对吗?
-o
选项告诉编译器什么,如下所示?
gcc a.o y.o -o x.out
我的另一个问题是,当我有这样的源代码时:
#include <stdio.h>
int main(){
puts("");
}
好吧,编译器知道在哪里寻找 stdio.h
,但是可执行文件必须 linked 到 stdio.o
,不是吗? stdio.o
文件位于何处?
它表示输出文件,即您的目标文件或可执行文件应该是什么。您可以通过执行 gcc --help
或 man gcc
.
<stdio.h>
是标准库的一部分,您的编译器已经链接到它。
gcc -o [file]
将构建输出写入输出文件。这不要与优化级别 -O 混淆。我不认为此选项与链接有任何关系。
参见 manpages.info/linux/gcc.1.html。在 Synopsis 部分下,您将看到 -o
选项。
关于
Well OK, the compiler knows where to look for
stdio.h
, but the executable must be linked tostdio.o
, mustn't it? Where does thestdio.o
file reside?
第一个问题的答案是"No"。由于第一个问题的答案是"No",所以第二个问题不相关。
在stdio.h
中声明的函数和变量不必在stdio.o
中。它们通常位于库(.a
或 .so
)中,该库位于链接器查找库文件的目录之一中。
一般来说,没有规定每个.h
文件都有对应的.o
文件。可以在多个 .c
文件中实现在 .h
文件中声明的函数和变量,这将导致多个 .o
文件。也可以让在多个 .h
文件中声明的函数和变量在一个 .c
文件中实现。这些组织方式因项目而异。
另一方面,每个 .c
文件都有一个对应的 .o
文件(我还没有看到任何平台可以编译多个 .c
文件来创建一个 .o
文件)。编译 .c
文件产生的所有 .o
文件都链接在一起以创建可执行文件。