编译简介
2013-04-21 23:10
176 查看
平台:linux
编译器:GCC
源文件:hello.c
到底GCC在将源文件编程可执行文件的时候做了什么工作呢,首先你得
指导GCC的常用命令吧,GCC在工作的步骤为:
1. 预编译
命令: gcc -E hello.c -o hello.i
或者 cpp hello.c > hello.i
然后你就可以gedit hello.i来打开它。好好比较下两者
的内容
主要作用:1. 展开所有的#define宏,就是在用到宏的地方进行替换。
同时删除该宏
2. 处理所有的条件编译选项,包括#if 等等
3. 处理所有的#include指令,直接在包含的位置展开文件
如果被包含的文件里面还包含其它的文件,那么递归展开
4. 删除所有的注释
5. 添加行号和文件名注释,以便在编译的时候输出信息
6. 保留#pragma宏,因为编译器需要使用
2. 编译
命令:gcc -S hello.i -o hello.s
或者 调用你的gcc目录下的cc1程序,gcc目录一般在/usr/lib/下
cc1 hello.i > hello.s
然后你还是可以gedit hello.s来打开它,看看里面汇编的代码
主要作用:1. 编译的过程是词法分析,语法分析,语义分析,目标代码
生成,主要是用来生成汇编代码。好好看看编译原理方面
的内容即可。
3. 汇编
命令:gcc -c hello.s -o hello.o
或者 as hello.s -o hello.o
然后生成了常见的.o文件了,再怎么办?gedit打不开的,因为
事实上.o文件已经算是一种可执行文件了,所以可以采用工具
objdump ,readelf来进行查看。具体工具使用后面会说到。
主要作用:1. 翻译汇编代码到目标代码,然后生成中间文件
4. 链接
命令:ld
详细的命令比较复杂,链接是是程序运行过程中最复杂的一个部分了
目的就是将不同的.o文件或者库文件链接在一起,形成一个真正可执
行的文件。
编译器:GCC
源文件:hello.c
到底GCC在将源文件编程可执行文件的时候做了什么工作呢,首先你得
指导GCC的常用命令吧,GCC在工作的步骤为:
1. 预编译
命令: gcc -E hello.c -o hello.i
或者 cpp hello.c > hello.i
然后你就可以gedit hello.i来打开它。好好比较下两者
的内容
主要作用:1. 展开所有的#define宏,就是在用到宏的地方进行替换。
同时删除该宏
2. 处理所有的条件编译选项,包括#if 等等
3. 处理所有的#include指令,直接在包含的位置展开文件
如果被包含的文件里面还包含其它的文件,那么递归展开
4. 删除所有的注释
5. 添加行号和文件名注释,以便在编译的时候输出信息
6. 保留#pragma宏,因为编译器需要使用
2. 编译
命令:gcc -S hello.i -o hello.s
或者 调用你的gcc目录下的cc1程序,gcc目录一般在/usr/lib/下
cc1 hello.i > hello.s
然后你还是可以gedit hello.s来打开它,看看里面汇编的代码
主要作用:1. 编译的过程是词法分析,语法分析,语义分析,目标代码
生成,主要是用来生成汇编代码。好好看看编译原理方面
的内容即可。
3. 汇编
命令:gcc -c hello.s -o hello.o
或者 as hello.s -o hello.o
然后生成了常见的.o文件了,再怎么办?gedit打不开的,因为
事实上.o文件已经算是一种可执行文件了,所以可以采用工具
objdump ,readelf来进行查看。具体工具使用后面会说到。
主要作用:1. 翻译汇编代码到目标代码,然后生成中间文件
4. 链接
命令:ld
详细的命令比较复杂,链接是是程序运行过程中最复杂的一个部分了
目的就是将不同的.o文件或者库文件链接在一起,形成一个真正可执
行的文件。
相关文章推荐
- CC2541之notify通知方式的介绍和使用 一、简介 本篇介绍CC2541从机端的notify通知的两种方式。 二、实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR
- C语言编译过程简介
- Linux 2.6.19.x 内核编译配置选项简介
- 主题三 编译过程介绍---- 15.编译过程简介
- nginx之 nginx-1.9.7 编译安装、理论简介
- 【转】mongodb简介及源码编译安装mongo2.0.0服务器
- Shark简介、部署及编译小结
- 编译链接简介及makefile书写<一>
- android hook 框架 libinject2 简介、编译、运行
- 【转】wxWidgets编译简介
- 在Linux下C源程序的编译简介&VMWare安装Redhat后无法找到gcc解决办法
- Nginx简介,编译,安装和简单操作
- ESP32 的 ULP 协处理器简介和汇编编译环境设置
- Sass入门——简介+语法格式及编译调试
- C++程序编译过程简介
- 转 C语言编译过程简介
- OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤
- Linux 2.6.19.x 内核编译配置选项简介
- 编译过程简介
- Linux 2.6.19.x 内核编译配置选项简介