前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下将源文件编译成目标文件的过程解析

Linux下将源文件编译成目标文件的过程解析

作者头像
砸漏
发布2020-10-19 15:01:32
1.8K0
发布2020-10-19 15:01:32
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

简介

请讲一下linux如何源文件逐步编译成可执行文件。

解答

首先先上图对编译的整个过程有个感性的认识,然后再逐步分析各个过程。

以hello.c 程序为例

代码语言:javascript
复制
# include <stdio.h>
main{
  printf("hello\n");
}

一个.c源程序需要经过预处理器生成.i文件,再经过编译器生成.s文件,再经过汇编器生成可重定位目标文件.o文件,再与其他.o文件经过链接器生成最终的可执行目标程序。

预处理阶段。主要是处理源文件中以“#”开头的预编译指令。

删除#define并展开宏

处理所有条件预编译指令,如#if, #ifdef, #endif

插入头文件到“#include”处

删除所有注释

添加行号和文件名标识,以便编译时编译器产生调试用的行号信息

保留所有#pragma编译指令。

编译阶段。将预处理得到的预处理文件进行语法分析,词法分析,语义分析,优化后,生成汇编代码文件(汇编语言源程序)。

汇编阶段。利用汇编程序(汇编器)将汇编语言源程序转换成机器指令序列(机器语言程序)。

链接阶段。将多个可重定位的目标文件.o合并以生成可执行文件,其可以被加载到内存中,由系统执行。

总结

以上就是本文关于Linux下将源文件编译成目标文件的过程解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 解答
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档