记录C文件到可执行二进制文件的经历过程
创始人
2024-01-25 07:22:35
0

正常情况下,C代码写完后在Linux系统下直接通过gcc命令编译成可执行文件,即

#include int main()
{printf("hello, world!\n");return 0;
}

编译:

gcc hello.c -o hello

运行:

./hello

结果:

在这里插入图片描述

接下来讲述一下具体的编译过程

这个编译过程一共分为4步:预处理、编译、汇编、链接

# 预处理:
gcc -E hello.c -o hello.i
# 编译:
gcc -S hello.i -o hello.s
# 汇编:
gcc -c hello.s -o hello.o
# 链接:
gcc hello.o -o hello

1. 预处理

预处理就是处理所有以#开头的代码,比如头文件展开、宏定义替换、条件编译等,使用命令:gcc -E hello.c -o hello.i 。打开预处理文件后,发现代码多了很多,但是头文件没了。其实就是去指定目录下,比如 /usr/include/ 的目录找到 stdio.h 文件,复制粘贴到原文件中
在这里插入图片描述

2. 编译

编译做了两件事情,先是语法检查,然后把C文件变成了汇编文件,使用命令:gcc -S hello.i -o hello.s 。生成的新文件hello.s里面便是汇编代码
在这里插入图片描述

3. 汇编

汇编使用命令:gcc -c hello.s -o hello.o 。把汇编文件翻译成二进制文件hello.o (这个文件是无法直接看懂的)。
现在的hello.o文件虽然是二进制文件,但是还是不能直接运行,因为这个文件还缺少很多信息的支撑,比如这个文件并不知道printf函数在哪,所以需要最后一步:链接

4. 链接

链接主要是把工程里面所有的文件合并,然后找到依赖的库文件,比如printf属于C库,把库的信息放到最终的二进制文件中,其中还涉及了动态链接和静态链接,最终得到了二进制文件才是可执行文件,命令:gcc hello.o -o hello
在这里插入图片描述

相关内容

热门资讯

“根本做不完!”外卖大战白热化... “太疯狂了,周六晚上,全国人民都在熬夜点外卖。喝不完,根本喝不完。”不少网友感叹。与之相呼应的是奶茶...
“黄山好人”汪笃银:退役不褪色...   汪笃银,男,1952年12月出生,中共党员,徽州区岩寺镇人。他既是硝烟战场上的铁血硬汉,也是社区...
syb以往相关经验(拥有多次创... SYB培训是高校经常开展的一种培训,是大学生创业课程的重要组成部分。SYB在英语中是“创业”的缩写,...
义乌小商品代加工外发,温州小商... (图片/温州日记)温州火车站的金瑞小商品综合体前几年常和朋友来这里买帽子、发卡等小东西。之后有了淘宝...
项目代理服务有哪些地方(找项目... 陶吧,一个乡镇代理项目玩泥巴是孩子的天性,但在城市里,这些乐趣几乎被剥夺了。陶瓷艺术吧开业后,孩子们...
红色基因铸魂、绿色产业赋能——...   央视网消息:1940年2月23日,民族英雄杨靖宇将军在濛江雪原与日本侵略者英勇战斗至生命最后一刻...
焦点访谈丨跨区域招聘、开设微专...   2025年全国高校毕业生预计达1222万人。当年年刷新的毕业生数字和经济转型期的岗位结构性矛盾发...
世界市长对话·上合峰会城市 |...   来自澳大利亚的视频博主艾米(Amy)以“金发女孩在中国(Blondie in China)”走红...
义乌童装5一10元批发(义乌小... 大多数消费者追求的是物美价廉,十元店的外观很好的满足了大众的需求,价格低廉,商品品种齐全,品质优良。...
新华述评丨历史十字路口,世界为...   新华社北京7月6日电 题:历史十字路口,世界为何需要“大金砖”  新华社记者叶书宏  当地时间7...