什么是GCC -o选项? [重复]

问题描述 投票:-3回答:3

这个问题已经在这里有一个答案:

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文件驻留?

c gcc
3个回答
2
投票

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文件链接在一起以创建可执行文件。


2
投票

它表示输出文件,即你的目标文件或可执行文件应该是什么。你可以看到通过做gcc --helpman gcc此信息。

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


1
投票
gcc -o [file]

写入生成输出到输出文件。这不是与-O这是优化级别相混淆。我不相信这个选项有什么关系联系起来。

© www.soinside.com 2019 - 2024. All rights reserved.