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

标签 c cmd tdm-gcc

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

最佳答案

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

这些目标文件仍然会被创建,但它们被认为是临时的,并在最终程序链接后被删除。

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

您可以使用选项 -v verbose 查看 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 是链接器的内部名称,它读取目标文件和库并创建最终的可执行文件。

关于c - 为什么通过命令提示符编译 C 程序时未创建 *.o(对象)文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51339976/

相关文章:

powershell - 在Powershell中提示输入

c - 哪里可以下载 dwmapi.lib?

c - C 中的二叉搜索树插入函数

c - 如何在 c 中分配大容量(GB 数量级)的内存?

c - 正在重新分配的指针未分配

c++ - std::vector<bool> 优化实现

c - 在内核空间中存储结构数组,Linux

PHP 在命令提示符中未被识别为内部或外部命令

windows - 如何使用CMD命令查找和删除文件?