C语言程序的编译、链接具体过程及Linux环境下的具体实例
2017-02-21 22:59
399 查看
我们知道一个程序从编写完成到生成可执行文件分为预处理、编译、汇编、链接,最后再生成可执行文件。
预处理阶段,预处理器主要做四部分工作,分别是:头文件展开、宏替换、去注释以及条件编译。
(1)头文件展开就是编译器会根据字符#开头的命令去读取相应的系统文件或者自定义文件, 并把相应的文件直接插入到当前程序代码中,这就完成了头文件的展开。(2)宏替换就是将程序员自定义的宏变量、宏函数等直接替换,如:#define SIZE 10,在宏替换的过程中直接将代码中出现SIZE的地方用10替换掉,不考虑类型、优先级等,所以在定义和使用宏的时候程序员自己要注意这一问题,宏函数这里先不做具体解释。(3)去注释就是将代码中的注释部分直接减掉,简单易懂。(4)条件编译就是根据程员的思考及设计,对程序代码中的部分代码进行处理,配合宏定义语句使得满足条件或者不满足条件的代码直接个当做注释部分一样被裁减掉,具体看程序员自己的设计。
编译阶段就是将C语言转换成汇编语言的一个过程。汇编语言程序中的每条指令都以一种标准的文本格式确切的描述了一条低级机器语言指令。
汇编阶段就是将汇编语言就是将汇编语言翻译成机器语言指令的一个过程,由汇编器完成,处理完成之后得到一个二进制文件。
链接阶段由连接器负责完成,它将代码中调用的库函数、外部函数、程序员自己编写的函数等所有文件(经过汇编阶段完成后得到的二进制文件)处理成一个可执行文件,这就是链接阶段完成的。
Linux环境下在程序的预处理、编译、汇编、链接的过程都可以用gcc的系列命令得到其文本文件,以hello world程序为例,当这个程序编写完成以后(假设命名为hello.c),用gcc -E hello.c -o hello.i 命令就可以得到一个预处理完成之后的文件,用编辑器打开就可得到前面所提到的头文件展开、宏替换、去注释、条件编译,这四项工作完成以后的文件hello.i,而且可以清楚的看到原hello world程序的变化,然后用gcc -S hello.i -o hell.s 命令就可以得到一个全是汇编语言的文件hello.s,用文件编辑器打开可以看到一系列的汇编语言代码,再然后用gcc -c hello.s -o hello.o 命令就可以得到一个二进制文件hello.o,如果用编辑器打开会得到一堆乱码的文件,最后再用gcc hello.o -o hello 命令就得到一个可执行的文件hello,输入./hello之后就会在屏幕上显示hello world.
预处理阶段,预处理器主要做四部分工作,分别是:头文件展开、宏替换、去注释以及条件编译。
(1)头文件展开就是编译器会根据字符#开头的命令去读取相应的系统文件或者自定义文件, 并把相应的文件直接插入到当前程序代码中,这就完成了头文件的展开。(2)宏替换就是将程序员自定义的宏变量、宏函数等直接替换,如:#define SIZE 10,在宏替换的过程中直接将代码中出现SIZE的地方用10替换掉,不考虑类型、优先级等,所以在定义和使用宏的时候程序员自己要注意这一问题,宏函数这里先不做具体解释。(3)去注释就是将代码中的注释部分直接减掉,简单易懂。(4)条件编译就是根据程员的思考及设计,对程序代码中的部分代码进行处理,配合宏定义语句使得满足条件或者不满足条件的代码直接个当做注释部分一样被裁减掉,具体看程序员自己的设计。
编译阶段就是将C语言转换成汇编语言的一个过程。汇编语言程序中的每条指令都以一种标准的文本格式确切的描述了一条低级机器语言指令。
汇编阶段就是将汇编语言就是将汇编语言翻译成机器语言指令的一个过程,由汇编器完成,处理完成之后得到一个二进制文件。
链接阶段由连接器负责完成,它将代码中调用的库函数、外部函数、程序员自己编写的函数等所有文件(经过汇编阶段完成后得到的二进制文件)处理成一个可执行文件,这就是链接阶段完成的。
Linux环境下在程序的预处理、编译、汇编、链接的过程都可以用gcc的系列命令得到其文本文件,以hello world程序为例,当这个程序编写完成以后(假设命名为hello.c),用gcc -E hello.c -o hello.i 命令就可以得到一个预处理完成之后的文件,用编辑器打开就可得到前面所提到的头文件展开、宏替换、去注释、条件编译,这四项工作完成以后的文件hello.i,而且可以清楚的看到原hello world程序的变化,然后用gcc -S hello.i -o hell.s 命令就可以得到一个全是汇编语言的文件hello.s,用文件编辑器打开可以看到一系列的汇编语言代码,再然后用gcc -c hello.s -o hello.o 命令就可以得到一个二进制文件hello.o,如果用编辑器打开会得到一堆乱码的文件,最后再用gcc hello.o -o hello 命令就得到一个可执行的文件hello,输入./hello之后就会在屏幕上显示hello world.
相关文章推荐
- Linux 环境下C编程指南-----gcc 编译的四大过程(预处理-编译-汇编-链接 )
- linux下c++编程环境搭建,运行过程以及调试,内含C++头文件源文件编译过程链接
- 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来
- 一个C程序的编译过程(Linux环境下Gcc)
- Linux下LAMP环境的安装之编译安装过程(一)
- C语言程序的编译和链接过程
- Linux下C++手动编译,链接过程
- Linux 学习笔记_13_2_LAMP环境编译(下) --编译过程及分析
- 详细分析make uboot 最后的编译链接的具体执行过程
- linux下QT Qtopia 主机编译调试环境的建立过程
- 详细分析make uboot 最后的编译链接的具体执行过程
- 第一次 Linux 环境下的程序编译与链接记录
- Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 搭建过程
- Linux下LAMP环境的安装之编译安装过程(三)
- Linux下C/C++编译链接过程及库函数使用说明
- Linux编译链接环境变量
- Linux下LAMP环境的安装之编译安装过程(五)
- c语言编译和链接几个项目的具体过程 在linux下
- Linux编译链接环境变量
- 编译链接------Linux环境下c语言静态链接库和动态链接库创建和使用