Linux系统GCC常用命令和GCC编译过程描述
前言:
GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又
扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改
名GNU编译器套件(GNU Compiler Collection)。(百度百科,想了解自己查询)
一.GCC程序的编译过程大概分四个阶段
- 预处理(Pre-Processing)
- 编译(Compiling)
- 汇编(Assembling)
- 链接(Linking)
二.简单HelloWorld程序的编译过程
示例:HelloWorld.c
1 #include <stdio.h> 2 int main() 3 { 4 printf("Hello World!\n"); 5 return 0; 6 }
Ctrl+Alt+T --->打开控制台--->输入vim HelloWorld.c
1. 执行如下命令:$ gcc -o HelloWorld HelloWorld.c
运行如下 : $ ./HelloWorld
输出: HelloWorld!
2. 分步编译如下:
(1) $ gcc –E HelloWorld.c -o HelloWorld.i
可以输出HelloWorld.i文件中存放着HelloWorld.c经预处理之后的代码。打开HelloWorld.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.
gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到HelloWorld.c中了。
//预处理结束
//这时候你看一下HelloWorld.i ,可以看到插进去了很多东西。
(2) $ gcc –S HelloWorld.i
gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。
查看下HelloWorld.s //生成汇编代码后结束
(3)生成汇编代码文件HelloWorld.s以后,需要gas汇编器负责将其编译为目标文件,如下:
$ gcc –c HelloWorld.c
或者:
$ gcc -c HelloWorld.c –o HelloWorld.o
或者:
$ gcc -c HelloWorld.i -o HelloWorld.o
//编译结束
//生成 HelloWorld.o文件
(4) $ gcc HelloWorld.o –o HelloWorld 生成连接,可执行文件(HellWorld重新生成的可执行文件)
gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。
附加的目标文件包括静态连接库和动态连接库。
对于上一小节中生成的HelloWorld.o,将其与C标准输入输出库进行连接,最终生成程序HelloWorld可执行文件
输入命令:gcc HelloWorld.o –o HelloWorld--->生成如下图:
3. 多个程序文件的编译
一般情况一个程序都是有若干个文件源文件组成,所以编译的时候需要形成多个编译单元,使用GCC编译器可以将多个源文件编译成所需要的程序
比如:源文件有main.c a.c b.c 最终生成一个可执行的文件main
比如:一个工程有main.c a.c b.c生成test的可执行文件。
编译命令如下:
$ gcc –c main.c a.c b.c –o main
或者:
$ gcc –o main main.c a.c b.c
GCC仍然会按照预处理、编译和链接的过程依次进行
大概过程相当于:
gcc -c main.c -o main.o
gcc -c a.c -o a.o
gcc -c b.c -o b.o
最后:
gcc main.o a.o b.o -o main
转载于:https://www.cnblogs.com/JiYF/p/6104003.html
Linux系统GCC常用命令和GCC编译过程描述相关推荐
- linux命令实验设备,实验二 Linux系统的常用命令
实验二Linux系统的常用命令 一.实验目的 1.X-windows的简单配置,掌握进入命令行模式和图形化模式的方法2.GNOME桌面的使用,包括注销与登录,系统信息的查看,GNOME下软件的使用3. ...
- Linux系统中常用命令行命令、快捷键、创建长路径的快捷键
Linux系统中常用命令行命令.快捷键.创建长路径的快捷键 1.常用Linux命令: 1.1 文件和目录: cd /home 进入 '/home' 目录 cd - 返回上一级目录 cd -/- 返回上 ...
- GCC常用命令及GCC编译器背后的故事
文章目录 一. GCC常用命令 1. 简介 2. 简单编译 2.1 预处理 2.2 编译为汇编代码(Compilation) 2.3 汇编(Assembly) 2.4 连接(Linking) 3. 多 ...
- gcc常用命令与gcc编译器背后的故事
目录 1 gcc常用命令 1.1 简介 1.2 简单编译 1.2.1 预处理 1.2.2 编译为汇编代码(Compilation) 1.2.3 汇编(Assembly) 1.2.4 连接(Linkin ...
- Linux系统编程常用命令总结
目录 一.Linux常用命令 1.常用工具 2.目录和文件命令 3.安装和卸载软件命令 4.压缩包管理 5.文件属性.用户用户组及查找与检索命令 6.网络管理命令 7.其他命令 二.Linux vi/ ...
- Linux系统的常用命令的使用
常用的命令使用方法: 1.echo echo - display a line of text 经过man手册帮助后获得更精准的命令操作方法 将字符串输出到显示设备上 常用选项: -n:不换行 ,如图 ...
- linux设备巡检指令,Linux系统巡检常用命令
Linux系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题.解决问题,降低损失,常用的巡检命令如下: # uname -a # 查看内核/操作系统/CPU信息 # ...
- linux 检测wan命令,Linux系统监控常用命令
释放双眼,带上耳机,听听看~! 1.free free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存. $ free (-buffers/cache) use ...
- Linux系统认知——常用命令(全)
文章目录 一.帮助命令 1.man(查看帮助手册) 2.info(阅读 info 格式的文档) 3.whatis(查询命令功能) 二.文件及目录相关命令 1.touch(创建新的空文件,改变已有文件的 ...
- linux运维常用巡检表格,Linux系统巡检常用命令
Linux系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题.解决问题,降低损失,常用的巡检命令如下: # uname -a # 查看内核/操作系统/CPU信息 # ...
最新文章
- string生成固定长度的哈希_Redis 选择Hash还是String 存储数据?
- 风险度量之[下行风险]
- A Famous Music Composer
- Linux系统中CPU使用率查询常用的5个命令
- oracle不足位数补0
- 树莓派dht11上云_树莓派使用 DHT11 / DHT22 温湿度传感器
- 拿了年终奖后,发现自己又拖后腿了?对不起,可能事实并没有那么糟糕...
- java人脸识别更新:摄像头支持360、火狐和谷歌浏览器
- Jenkins修改管理员密码
- sinh_带有Python示例的math.sinh()方法
- 刘朋:从技术到管理 - 团队制胜六步工作法(开篇)
- 彼尔盖茨的十句话,绝对让你改变一生
- zip()和enumerate()用于for-in中遍历可迭代对象
- DRF之认证组件源码解析
- html5学习笔记6-- canvas
- 比较ole db/odbc/ado/ado.net/jdbc
- 如何让测试RFC2544更便捷——RFC2544测试实操
- error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“:
- base64编码将字符串转换为图片
- 自然语言处理总复习(五)—— 词义消歧
热门文章
- Centos7下搭建单节点Zookeeper
- ES6新特性总结之解构赋值和字符串模板
- Ubuntu16.04安装Docker 入门
- [Shell Programmin] ZSH
- 数数苹果手机中的不科学
- OSSIM安装zabbix
- IEEE 你吃透了吗?
- ScrollView嵌套Gridview或者listview滚动问题
- Luogu2992[USACO10OPEN] Triangle Counting
- python输入一系列的值_python中的input()和print()输入输出函数应用实例笔记