GCC中的-o选项是什么?

时间:2015-04-01 18:50:52

标签: c gcc

gcc -c x.c

告诉编译器从x.c文件创建目标代码,而不是尝试链接它,对吗?

-o选项如何告诉编译器,如下所示?

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

我的另一个问题是,当我有源代码时:

#include <stdio.h>

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

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

3 个答案:

答案 0 :(得分:2)

它表示输出文件,即您的对象文件或可执行文件应该是什么。您可以通过gcc --helpman gcc来查看此信息。

<stdio.h>是标准库的一部分,您的编译器已经链接到该标准库。

答案 1 :(得分:2)

manpages.info/linux/gcc.1.html。在概要部分下,您将看到-o选项。

关于

  

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

第一个问题的答案是&#34;否&#34;。由于第一个问题的答案是&#34;否&#34;,第二个问题是不相关的。

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

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

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

答案 2 :(得分:1)

gcc -o [file]

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