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
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return ;
}
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
Linux系统GCC常用命令和GCC编译过程描述的更多相关文章
- Linux 系统巡检常用命令
Linux系统巡检常用命令 # uname -a # 查看内核/操作系统# cat /etc/centos-release # 查看centos操作系统版本# cat /proc/cpuinfo ...
- linux系统的常用命令
linux系统中常用的命令如下(以后经常补充): cd .. 返回上一级 cd use 进入use目录
- Linux系统之-常用命令及技巧
一. 通用命令:1.date :print or set the system date and time2. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z ...
- 用xshell操作linux系统的常用命令
(1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以. ...
- linux系统学习(常用命令)
今天调休,闲来无事,研究一下linux系统. Linux常用命令: 一:文件管理 ctrl+alt:在虚拟机与windows之间切换ctrl+g:进入linux输入模式 pwd:查看当前目录 ls:列 ...
- Linux系统巡检常用命令-乾颐堂
Linux系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题.解决问题,降低损失,常用的巡检命令如下: # uname -a # 查看内核/操作系统/CPU信息 # ...
- Linux系统一些常用命令(持续增加)
这些命令什么的全是从网上找的,防止忘记,留下来备忘 1.linux服务器如何从另一台服务器拷东西:可以用scp命令scp user@remote.machine:/remote/path /local ...
- LINUX系统一一常用命令
前言 LINUX UNIX Centos RedHat Ubuntu SHELL shell脚本 shell shell命令 类似windows系统的bat 批处理文件 里面都是脚本 CentOS6. ...
- Linux 系统监控常用命令
简介 列举操作系统级监控常用的几个方法,建议收藏使用 CPU top 命令可用于监控系统整体负载,包括cpu.内存使用等,能够实时显示系统中各个进程的资源占用状况 输出样例 top - 19:37:4 ...
随机推荐
- (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
今天运行Redis时发生错误,错误信息如下: (error) MISCONF Redis is configured to save RDB snapshots, but is currently n ...
- css水平垂直居中对齐方式
1.文字或者内联元素的垂直水平居中对齐 css属性 -- 水平居中:text-aligin:center; 垂直居中: line-height:height; 例子:. html: <div c ...
- Android中Service通信(二)——绑定Service进行通信
一.把输入文本的数据同步到服务的实例(如何执行服务的内部代码) 绑定服务比启动服务更加方便高效,绑定服务中的直接方法调用比Intent作为载体传输更为快捷得多. 1.activity_main.xml ...
- sqlserver事务加锁机制
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...
- 关于java中自增,自减,和拓展运算符的小讨论
java中运算符很多,但是能深入讨论的不算太多.这里我仅仅以++,*=为例做讨论. 例:++ i=0; i=i++ + ++i;//i=1 i=++i+i++;//i=2 i=i++ -++i;//i ...
- [Machine Learning & Algorithm] 神经网络基础
目前,深度学习(Deep Learning,简称DL)在算法领域可谓是大红大紫,现在不只是互联网.人工智能,生活中的各大领域都能反映出深度学习引领的巨大变革.要学习深度学习,那么首先要熟悉神经网络(N ...
- Redis实战阅读笔记——第二章
在性能的要求下,如何获取重构之前的构件
- 一些LINQ的使用
var list = from staff in staffList from extraRecord in extraList where staff.staffID == extraRecord. ...
- Jquery制作--焦点图淡出淡入
之前写了一个焦点图左右轮播的,感觉淡出淡入用得也比较多,就干脆一起放上来啦.这个容器用了百分比宽度,图片始终保持居中处理,定宽或者自适应宽度都是可以的. 兼容到IE6+以上浏览器,有淡出淡入速度和切换 ...
- 使用php+swoole对client数据实时更新(下)
上一篇提到了swoole的基本使用,现在通过几行基本的语句来实现比较复杂的逻辑操作: 先说一下业务场景.我们目前的大多数应用都是以服务端+接口+客户端的方式去协调工作的,这样的好处在于不论是处在何种终 ...