程序的编译与生成可执行文件学习笔记(一)

程序的编译、链接流程:

预处理过程:

1.文件包含:预处理器通过 #include 指令将其他文件的内容包含到当前源文件中。这样可以将头文件的定义插入到源代码中,以便在编译时进行函数和变量的声明。

2.宏替换:预处理器会对源代码中的宏进行替换。宏是使用 #define 指令定义的符号常量或函数样式的宏。预处理器会将宏的使用处替换为对应的宏定义内容。

3.条件编译:预处理器根据条件指令(如 #if#ifdef#ifndef 等)来判断是否编译某段代码。根据条件的真假,预处理器会选择性地包含或排除特定的代码块。

4.注释删除:预处理器会删除源代码中的注释,包括单行注释 // 和多行注释 /* ... */。注释对编译过程没有实际影响,因此在预处理阶段可以将其删除。

5.符号替换:预处理器会将源代码中的符号(如常量、变量、函数名等)替换为其对应的值或表达式。这些符号可以是预定义的宏、宏参数或预处理器定义的符号常量。

预处理作用:

可以提高代码的可维护性、重用性、可移植性,可以根据不同的编译条件选择性地包含或排除代码块

 可执行文件的组装:

        链接器连接的文件有代码段数据段,不同文件代码段和数据段不同,链接的时候合并同类项,将相同的代码段和数据段合并在一起,组成可执行文件。

        文件头部的作用:包含文件信息,比如可执行文件运行在哪个平台上(x86或者ARM)、文件大小多少、文件入口地址是多少。


        GNU(GNU's Not Unix)是一个自由软件项目,它的目标是创建一个完全自由的操作系统,即开源思想。

.text:代码段(函数放在代码段)

.rodata:只读数据段(打印的字符串

.data:数据段(初始化全局变量静态变量放在数据段)

.bss:(存储未初始化的全局变量静态变量

 .symtab:(存储符号表信息

 

 笔记参考链接:3.1 程序的编译与可执行文件_哔哩哔哩_bilibili

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值