IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> C代码编译过程 -> 正文阅读

[系统运维]C代码编译过程

C代码编译过程

过程简介

hello.c代码为例,当我们编译hello.c时。

#include <stdio.h>
int main()
{
	printf("hello world\n");
	return 0;
}

一般使用的编译命令是

gcc -o hello hello.c

我们能看到通过该命令后会得到一个可执行文件hello,执行该程序

./hello

我们会在界面上看到

hello world

一般而言我们不需要追究编译的细节,就好比我们去餐厅吃饭,我们不需要去细问厨师是先放盐还是先放油。但如果我们有志于成为一个合格的厨师的话,那么这些做菜的细节就很重要,事实上从hello.c变成hello也是有很多过程的,分别是预处理,将头文件放入hello.c中,将宏定义进行替换,将注释去掉等,得到hello.i文件。接着是编译,将hello.i文件由代码变成汇编语言,得到hello.s,再接着是汇编阶段,将hello.s翻译成机器语言指令hello.o。最后是链接阶段,将调用的函数合并到hello.o中,比如再hello.c中我们调用了printf函数,这个函数的预编译好的文件printf.o就是在这个阶段与hello.o进行合并生成我们最终的可执行文件hello
在这里插入图片描述

预处理

预处理阶段,预处理器cpp根据以字符#开头的命令对原始的代码进行处理。以上文的hello.c为例,在这个环节,预处理器cpp会根据第一行的命令#include <stdio.h>stdio.h文件中的所有内容插入到hello.c中。我们可以使用gcc命令来对这个环节进行观察。

gcc -E hello.c -o hello.i

我们使用vim打开hello.i文件,我们会发现多了700多行代码,在文件的最后我们找到了自己写的代码。
在这里插入图片描述

编译

编译阶段,编译器ccl将C语言代码hello.i翻译为汇编语言hello.s,我们使用gcc命令观察这个环节

gcc -S hello.i -o hello.s

使用cat或者vim打开hello.s文件,其内容如图所示
在这里插入图片描述

汇编

汇编阶段,这个阶段将汇编语言翻译为机器语言也就是01hello.s也将变成二进制文件hello.o,我们使用gcc命令定位到这个阶段。

gcc -C hello.s -o hello.o

我们用vim打开test.o只能看到乱码,使用xxdhello.o以16进制的形式展现出来。
在这里插入图片描述

链接

链接阶段将其他已经预编译好的.o文件链接整合到一起,比如过程简介环节提到过的printf.o文件,我们使用gcc命令进行定位

gcc hello.c -o hello

使用xxdhello以16进制的形式展现出来。
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:44:28  更:2021-09-29 10:46:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:52:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码