【问题标题】:What is the -o option in GCC? [duplicate]GCC 中的 -o 选项是什么? [复制]
【发布时间】:2015-04-01 18:50:52
【问题描述】:
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 文件在哪里?

【问题讨论】:

  • 我想这不是第一次有人问这个问题了。
  • 我搜索了,没有找到重复的。但是下面的答案还可以,我想这被否决了,因为人们认为您不应该gcc --help 并查看每个选项的用途,您不这么认为吗?
  • 每个问题一个问题,请。
  • manpages.info/linux/gcc.1.html。在概要部分下,您将看到-o 选项。
  • @a3f 谢谢,我找到了:stackoverflow.com/questions/6240639/…

标签: c gcc


【解决方案1】:

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

【讨论】:

  • 我明白了,非常感谢。
【解决方案2】:

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

&lt;stdio.h&gt; 是您的编译器已经链接到的标准库的一部分。

【讨论】:

    【解决方案3】:
    gcc -o [file]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2018-10-29
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多