gcc编译常用命令

参考

简介

GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GNU Compiler Collection 也即是 GNU 编译器家族的意思了。另一方面,说到 GCC 对于操作系统平台及硬件平台支持,概括起来就是一句话:无所不在。

简单测试

下面一个代码例子

1
2
3
4
5
6
7
// file name : main.c
#include<stdio.h>
int main(void)
{
printf("this is a test!\n");
return 0;
}

一步到位的编译

1
gcc -o main main.c

其实编译分成四步:预处理(也叫预编译,preprocessing)、编译(compilation)、汇编(assembly)、链接(linking)

预处理

在预处理阶段会将**#include的文件都包含到当前文件,上面例子中时间stdio.h文件中的内容包含进来,并且将define宏定义都进行替换。但注意typedef**类型定义不变。

指令如下,用**-E**选项

1
gcc -E main.c -o main.i
编译

编译生成汇编代码 ,用-S选项,如下

1
gcc -E main.i -o main.s
汇编

这个阶段,将汇编文件生成目标文件

1
gcc -c main.s -o main.o
链接

gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

1
gcc -o main.o -o main

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!