在使用代码块时,当我点击 Build 按钮时会创建 *.o (object) 文件。但是,在使用命令提示符时不会创建 *.o 文件。是什么原因?我正在使用 TDM-GCC-64。
问问题
2236 次
1 回答
2
当您直接从命令行使用 GCC 编译 C 程序时,不使用选项-c
(仅编译),它将创建一个可执行文件而不转储中间目标文件。
这些目标文件仍然被创建,但它们被认为是临时文件,并在最终程序链接后被删除。
当您使用 IDE 时,它通常会进行单独的编译和链接阶段,因此目标文件会被保留。如果你的程序不平凡并且有很多源文件,这很好,因为它加快了编译时间。
您可以使用详细选项查看 GCC 命令行的完整输出-v
:
$ 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
是链接器的内部名称,它读取目标文件和库并创建最终的可执行文件。
于 2018-07-14T13:36:06.147 回答