从.c文件到可执行文件的四个阶段


  1. 预处理:gcc -E test.c -o test.i

    ①头文件的展开(加载);

    ②宏替换

    ③处理条件编译

    总结:处理以“#”开头的语句

    注:预处理不做语法检查

  2. 编译:gcc -c test.i -o test.o

    ①语法检查

    ②词法分析

  3. 汇编:gcc -s test.o -o test.s

    ①将c语言转化为汇编码

  4. 链接:

    链接程序的主要工作是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够让操作系统装入执行的同一整体。

    展开头文件,调用标准库里面定义的函数(这些函数可执行,但看不见源代码)有些函数书静态的调用,就是直接把函数写到源文件中,但有些事动态链接的,就是在链接阶段只判断这个函数的存在性,分配一个地址,在执行时再来替换函数。

    连接处理可以分为两种:

    ①静态链接:在这种链接方式下,函数的代码将从其所在的静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。

    ②动态链接:在这种链接方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所做的只是在最终的可执行程序中记录下共享对象的名字以及其他少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值