当前位置:网站首页>C语言的编译
C语言的编译
2022-08-11 05:25:00 【火种力量】
C语言的编译
前导
- 在介绍高级语言的编译前,我们先来了解以下内容。
- 机器是怎么知道它要执行什么指令。
- 处理器就向我们人一样,它也有着自己的语言,就像我们大部分中国人一样,有着自己的语言-汉语,使用汉语,我们可以进行日常的生活交流,例如购物,搭乘公共交通等;而处理器能够识别的语言叫做机器语言,它也有着自己的一套规则,例如我们汉语的语法结构,主谓宾等。我们要让处理器工作起来,必须要按照的规则,书写一套指令,让它按照我们的预想去做动作。
- 如何生成这些指令。
- 我们目前接触的编程语言,历经了多年的发展,已经从当初直接编写机器语言,让处理器运行起来,过渡到高级语言(C语言、C++等)阶段。但是我们的处理器只能识别机器语言,那么我们怎么将高级语言和机器语言联系起来,或者说怎么将高级语言翻译成只有处理器识别的机器语言,那就需要一种工具-编译器,将高级语言翻译成机器语言。
- 机器是怎么知道它要执行什么指令。
简介
- 从前导部分可知,编译,其实就是将高级语言翻译成机器语言。翻译这个词我们应该很熟悉,就好像我们将汉语翻译成英语一般,需要经历一个过程,例如分析主谓宾语法结构,语义等然后按照英语的语法结构和语义去组合;而将高级语言翻译成机器语言同样也需要这样的一个过程。
编译的过程
- 以一个我们非常熟悉的hello world例子C语言例子做说明,其中例子源码如下:
#include <stdio.h>
int main(int argc,char * grgv[])
{
printf("hello world ");
return 0;
}
以上源码的编译过程,可用下图表示:

编译的过程可分为四个阶段,预处理阶段、编译阶段、汇编阶段、链接阶段
- 预处理阶段 :
- 预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第一行的#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中,结果就得到了另一个C程序,通常是以.i作为文件扩展名
- 编译阶段:
- 编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令
- 汇编阶段:
- 汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言指令而不是字符,如果我们在文本文件中打开hello.o文件,看到的将是一堆乱码
- 链接阶段:
- 链接器(ld)负责处理合并目标代码,生成一个可执行目标文件,可以被加载到内存中,由系统执行
- 预处理阶段 :
linux gcc编译器对应的命令
| 编译过程 | 命令 | 含义 |
|---|---|---|
| 预处理阶段 | gcc -E hello.c -o hello.i | 预编译 |
| 编译阶段 | gcc -S hello.i -o hello.s | 将 hello.i 编译为目标代码 |
| 汇编阶段 | gcc -c hello.s -o hello.o | 生成汇编源文件 |
| 链接阶段 | gcc hello.o -o hello | 将生成的目标文件链接成可执行文件 |
边栏推荐
- 目标检测——Faster-RCNN 之 RCNN
- 我心仪的数据集—目标检测为主
- Introduction of safety helmet wearing recognition system
- Reconstruction and Synthesis of Lidar Point Clouds of Spray
- Diagnostic Log and Trace——开发人员如何使用 DLT
- 华为IOT设备消息上报和消息下发验证
- CMT2380F32模块开发8-Base Timer例程
- SCNet:Semantic Consistency Networks for 3D Object Detection
- CVPR2022——A VERSATILE MULTI-VIEW FRAMEWORK
- 梅科尔工作室-华为云ModelArts第一次培训
猜你喜欢

Severe Weather 3D Object Detection Dataset Collection

产品如何拟定优化方案?

安全帽识别系统-为安全生产保驾护航

mAPH——Waymo数据集

TAMNet:A loss-balanced multi-task model for simultaneous detection and segmentation

Mei cole studios - sixth DjangoWeb application framework + MySQL database training

CVPR2022——A VERSATILE MULTI-VIEW FRAMEWORK

电商机会:私域

网络七层结构(讲人话)

Introduction of safety helmet wearing recognition system
随机推荐
Mei cole studios - deep learning second BP neural network
小程序技术原理分析
需求文档(PRD)撰写指南
Node-1.高性能服务器
Node-2.垃圾回收机制
Reconstruction and Synthesis of Lidar Point Clouds of Spray
CNN-based Point Cloud De-Noising
OpenPCDet安装最新版:spconv一步到位
LiDAR Snowfall Simulation for Robust 3D Object Detection
Robust 3D Object Detection in Cold Weather Conditions
CMT2380F32模块开发10-高级定时器例程
产品经理与演员有着天然的相似
智慧工地 安全帽识别系统
安全帽识别
Diagnostic Log and Trace——DLT 离线日志存储
Socket 网络协议 等
Diagnostic Log and Trace——为应用程序和上下文设置日志级别的方法
mAPH - Waymo dataset
跨应用间调用: URL Scheme
实时姿态估计--基于空洞卷积的人体姿态估计网络