与将 .c 文件转换为 .o 文件并链接和汇编相比,编译 gcc .c 文件有什么区别?
What is the difference compiling gcc .c file in comparison to making a .c file into an .o file and linking and assembling?
我刚刚开始接触 GCC。
假设我们有一个文本文件,由 vim 编写,标签为 helloworld.c
为什么 SWIM(不是我的人)用
编译它
gcc helloworld.c 与 gcc -c helloworld.c 相比 gcc -o helloWorld helloworld.o ?
编译过程中有一些阶段:
预处理 -> 编译 -> 汇编 -> 链接。
阶段:
- 预处理:将 .h 文件中的一些测试包含到 .c 文件中并创建预处理的源代码。
- 编译:从预处理代码创建汇编代码。
- 汇编:从您的汇编代码创建目标模块。
- 链接:从您的目标模块创建可执行文件。
当您使用gcc [options]
时:
如果您使用:
gcc -E
在预处理阶段后停止并为您提供预处理代码。
gcc -S
在编译阶段后停止并为您提供汇编代码。
gcc -c
在组装阶段后停止并为您提供目标模块。
gcc -o
为您提供包含名称的可执行文件,默认情况下为您提供 a.out
一个文件,没有用。
但是,如果您编译一个较大的项目,您可能不想重新编译所有文件,例如,如果您只更改了一个文件。因此,获得编译时间。
使用中间 .o
文件可以让您只重新编译需要重新编译的内容,link 包含所有这些目标文件的最终二进制文件。
另一个用例是,如果您想使用自定义 link 脚本,例如选择您的部分或代码的位置。然后您需要从 .o
个文件中获取实际代码。
我刚刚开始接触 GCC。
假设我们有一个文本文件,由 vim 编写,标签为 helloworld.c
为什么 SWIM(不是我的人)用
编译它gcc helloworld.c 与 gcc -c helloworld.c 相比 gcc -o helloWorld helloworld.o ?
编译过程中有一些阶段:
预处理 -> 编译 -> 汇编 -> 链接。
阶段:
- 预处理:将 .h 文件中的一些测试包含到 .c 文件中并创建预处理的源代码。
- 编译:从预处理代码创建汇编代码。
- 汇编:从您的汇编代码创建目标模块。
- 链接:从您的目标模块创建可执行文件。
当您使用gcc [options]
时:
如果您使用:
gcc -E
在预处理阶段后停止并为您提供预处理代码。gcc -S
在编译阶段后停止并为您提供汇编代码。gcc -c
在组装阶段后停止并为您提供目标模块。
gcc -o
为您提供包含名称的可执行文件,默认情况下为您提供 a.out
一个文件,没有用。 但是,如果您编译一个较大的项目,您可能不想重新编译所有文件,例如,如果您只更改了一个文件。因此,获得编译时间。
使用中间 .o
文件可以让您只重新编译需要重新编译的内容,link 包含所有这些目标文件的最终二进制文件。
另一个用例是,如果您想使用自定义 link 脚本,例如选择您的部分或代码的位置。然后您需要从 .o
个文件中获取实际代码。