一 以下是C程序一般的编译过程:
从图中看到: 将编写的一个c程序(源代码 )转换成可以在硬件上运行的程序(可执行代码 ),需要进行编译阶段 和链接这两个阶段。 其中, 1. 编译阶段先通过“编译器 “把一个 .c / .cpp 源代码 编译成 .s的汇编代码 ;再经过“汇编器 ” 把这 个.s的汇编代码汇编成 .o 的 目标代码 2. “连接器 “ 通过连接其他 .o 代码(如果需要的话) 库文件 和 1 中的.o 目标代码生成可执行文件 该文件流被这三种程序(红色)的加工,分别表现出四种形式(蓝色) ,这就是c程序的编译和链接过程。如果再详细的话,编译器在将源文件编译成汇编文件的过程又分为:预处理阶段(生成 .i代码) 和 优化阶段
二、C编程中的文件后缀名介绍
.s 生成的汇编语言代码
三 演示 hello.c 的编译 过程(Linux 下 Gcc)
本小节的演示都针对文件 hello.c 进行
1.生成预处理后的文件 hello.i $ gcc -E hello.c -o hello.i 2 .生成汇编语言文件 hello.s $ gcc -s hello.i -o hello.s 3.生成目标文件 hello.o
$ gcc -c hello.i 4. 生成可执行文件 $ gcc -o hello hello.o 5. 运行及结果 $ ./hello Better goal, Better life! 当然也可以直接生成, $ gcc -c hello.c 就可以生成可执行文件。这是Gcc内部的事。但就算是跳跃也要经过一步步的翻译, 原理是相似的,万变不离其宗! (责任编辑:IT) |