为什么通过命令提示符编译C程序时未创建* .o(目标)文件?

时间:2018-07-14 13:31:11

标签: c cmd tdm-gcc

当我按下“生成”按钮时,将创建使用代码块* .o(对象)的文件。 但是,在使用命令提示符时,不会创建* .o文件。是什么原因? 我正在使用TDM-GCC-64。

1 个答案:

答案 0 :(得分:1)

在不使用选项-c(仅编译)而直接从命令行使用GCC编译C程序时,它将创建可执行文件而不会转储中间目标文件。

这些目标文件仍在创建中,但被视为临时,并在链接最终程序后将其删除。

使用IDE时,它通常会执行单独的编译和链接阶段,因此保留了目标文件。如果您的程序很简单并且有许多源文件,那会很好,因为它可以加快编译时间。

您可以看到带有选项-v的GCC命令行的完整输出:

$ gcc -v -o hello hello.c
...
.../cc1 -quiet -v hello.c ... -o /tmp/ccbKBzKx.s
...
... as -v --64 -o /tmp/ccLm6v3X.o /tmp/ccbKBzKx.s
... collect2 ... /tmp/ccLm6v3X.o ... -o hello

注释

  • cc1是真正的C编译器的内部名称,它将转储一个汇编文件。
  • as是将程序集转换为目标文件的汇编器。
  • p collect2是链接器的内部名称,该链接器读取目标文件和库并创建最终的可执行文件。