本文共 775 字,大约阅读时间需要 2 分钟。
一个编译过程包括下面几个阶段:
(1)预处理:预处理器将对源文件中的宏进行展开。
(2)编译:gcc将c文件编译成 汇编文件。 (3)汇编:as将汇编文件编译成机器码。 (4)链接:将目标文件和外部符号进行连接,得到一个可执行二进制文件。gcc所支持的文件后缀名
test.c 表示c原始程序test.i 表示经过预处理后的程序test.s 经过编译后的汇编语言程序test.o 通过汇编将编译文件转化成二进制的目标文件
gcc 参数 选项
常用参数:-c 表示编译源文件,只进行编译不进行链接,生成目标文件test.o-o 表示输出目标文件-o file 将file文件指定作为输出文件-g 表示在目标文件中产生调试信息,用于gdb调试-E:仅执行编译预处理;-S:将C代码转换为汇编代码;-Wall 打开所有类型的警告。
如果未指定参数
gcc test.c
则会将main.c文件进行预处理、编译、汇编和链接操作,最后默认生成a.out可执行文件
如果采用-o参数指定输出目标文件的名称:gcc test.c -o test
则最后不会生成a.out可执行文件,而是test可执行文件
预处理阶段
对包含的头文件和宏定义进行处理gcc -E test.c -o test.i//vim test.i
编译阶段
gcc -S test.i -o test.s//vim test.s 查看汇编语言
汇编阶段
采用as将汇编文件译成机器码as test.s -o test.o
但此时的test.o文件不能执行,还需要进行链接
gcc test.o -o test
此时test为可执行程序
汇编和链接可以直接一起进行执行
将.s的汇编文件和库文件链接起来直接形成可执行程序testgcc test.s -o test
转载地址:http://qxxmb.baihongyu.com/