被隐藏的操作---程序的翻译过程

本文详细介绍了程序从源代码到可执行文件的四个主要步骤:预处理(头文件展开、宏替换等)、编译(C语言转化为汇编)、汇编(汇编语言转化为二进制)和链接(静态链接与动态链接)。通过具体命令演示了每个阶段的过程。
摘要由CSDN通过智能技术生成
#include<stdio.h>

in main()
{
    printf("hello word");
    return 0;
}

打印hello word是一个最简单的代码.Linux下运行:$gcc hello.c     $./a.out

就能打印出:hello word

其实编译(包括链接)的命令:gcc hello.c 可分解为如下4个大的步骤

  • 预处理(Preprocessing)
  • 编译(Compilation)
  • 汇编(Assembly)
  • 链接(Linking)
  • 预处理,生成预编译文件(.文件)

        命令格式   $Gcc –E hello.c –o hello.i

        预处理的过程

           1) 头文件展开

           2) 宏替换

           3) 去注释

           4) 条件编译

           5) 添加行号

  • 编译,生成汇编代码(.s文件)

        命令格式  Gcc –S hello.i –o hello.s

         编译的过程   将C语言转为汇编语言

  • 汇编,生成目标文件(.o文件)

        命令格式:Gcc –c hello.s –o hello.o

        汇编的过程   将汇编语言转化成二进制

  • 链接,生成可执行文件

        命令格式:Gcc hello.o –o hello

        链接的过程   引入标准库函数

        通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。

        链接分为静态链接和动态链接

        静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。但在运行时也就不再需要库文件了。其后缀名一般为”.a”。

        动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去。这样可以节省系统的开销。动态库一般后缀名为”.so”,Gcc在编译时默认使用动态库。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值