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语言基础知识——编译

? ? ? ? 写完了神级入门程序,在运行程序前,稍稍了解了一下编程机制。(暂时还不知道具体用处,就是觉得高大上)

? ? ? ? 我练习编程使用的是VS2019,还用虚拟机装了一个CentOS操作系统,用于了解Linux环境。

? ? ? ? 了解编译步骤是在虚拟机中进行的,感觉手打命令简单一点。(VS各种功能太多了,目前只用了【调试】【运行】两个按钮。)


? ? ? ? 咱们编写的程序代码都被保存在一种文本文件中,被称为源代码文件,简称源文件

? ? ? ? C程序源文件的文件名以?.c?作为后缀,比如:hello.c

? ? ? ? 单独的源代码文件只有咱们编写的程序代码,是无法被执行的,需要通过编译器的处理才能编程可执行文件

? ? ? ? 编译器:是将高级语言编写的程序翻译成计算机能了解的机器语言指令集的程序。

? ? ? ? 注意:编译器是一个程序!!!

? ? ? ? 具体编译过程为可分为四步:

? ? ? ? 1、预处理

? ? ? ? 命令为:gcc -E 源文件名.c?-o 预处理文件名.i

? ? ? ? 注意:得到的预处理文件必须以 .i 结尾

? ? ? ? 例子:

gcc -E hello.c -o hello.i

? ? ? ? 预处理在前一篇文章中提了一嘴,在编译器编译程序之前进行,对程序 进行一些准备工作。

? ? ? ? 这些准备工作包括:

? ? ? ? 1)引入头文件

? ? ? ? 2)替换宏定义

? ? ? ? 3)执行条件代码

? ? ? ? 4)删除注释

? ? ? ? 这个阶段不会检查语法错误。

? ? ? ? 2、编译

? ? ? ? 命令为:gcc -S 预处理文件名.i -o 汇编文件名.s

? ? ? ? 例子:

gcc -S hello.i -o hello.s

? ? ? ? 预处理文件中的代码翻译成汇编指令

? ? ? ? 这个阶段会逐行检查语法错误

? ? ? ? 这个步骤之后,懂汇编语言的还是可以看懂文件内容的

? ? ? ? 3、汇编

? ? ? ? 命令为:gcc -c 汇编文件名.s -o 二进制文件名.o

? ? ? ? 例子

gcc -c hello.s -o hello.o

? ? ? ? 这个阶段会将汇编文件翻译成二进制文件,文件内容通篇都是二进制序列。

? ? ? ? 到这步为止,我们可以将得到的文件成为目标代码文件

? ? ? ? 4、链接

? ? ? ? 命令为:gcc hello.o -o hello

? ? ? ? 例子

gcc hello.o -o hello

? ? ? ? ?这一阶段是由一个叫链接器程序执行的。在通常情况下,编译器运行链接器。

? ? ? ? 连接器会将目标代码文件、操作系统的启动代码(不同的操作系统,拥有不同的启动代码),以及库代码(包含了你在程序用使用的库函数的具体代码)三者结合在一起,形成可执行文件。


? ? ? ? 上面四条命名都用到了一个参数 -o,这个参数的作用是定制目标文件的名称。

? ? ? ? 其中,前三条命令的目标文件名hello.i、hello.s、hello.o的名字可以随便写,但后缀是不可以随便写的

? ? ? ? 在Linux系统中,第四条命令生成的可执行文件的名称定义比较自由,因为Linux系统好像对于可执行文件名没有后缀要求???

????????但在Windows系统下,执行第四条命令后,会自动生成后缀为.exe可执行文件


? ? ? ? 编译4步骤也不是必须逐条执行的,也可以省略中间的一些步骤

gcc hello.c -o hello  //一步到位

gcc -S hello.c -o hello.s  //诸如此类,可以省略中间步骤

gcc hello.i -o hello  //也可以这么写,但在这一步之前,别忘了执行预处理命令

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:11:34  更:2021-10-04 13:13:24 
 
开发: 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 18:21:47-

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