helloWord执行过程

GCC由来

是由GNU组织编写,对抗商业收费的软件

GCC编译工具链

C语言整个编译过程可以分为四个阶段

  • 预处理阶段、编译阶段——GCC编译器
  • 汇编阶段、链接阶段——binutils工具链

运行helloWord

gcc helloword.c -o hello
  1. hello.c 的文件执行变为hello.i的文件(hello.c预处理之后的文件,头文件包含,条件编译、宏定义等)
  2. hello.i编译成hello.s的文件(hello.s是汇编文件。通过词法分析、语法分析就能编译成汇编文件了)
  3. hello.s 生成重定位文件hello.o
  4. hello.o文件链接成一个应用程序(hello应用程序)
  5. 在控制台通过./hello这个shell脚本就能执行这个程序了
    shell脚本怎么执行helloWord程序呢:
  6. shell创建一个进程fork()
  7. 运行execev(),可以理解成这是一个进程实体
  8. 然后在去调用sys_execve(),这是一个系统函数
  9. 继续调用load_elf_binary(),它会去文件系统里边加载hello应用程序到内存,准备去执行应用程序
  10. 执行应用程序需要链接一些库文件 ,静态链接和动态链接。
    - 静态链接:在编译阶段就会把所有用到的库全部打包到自己的一个可执行文件里,优点是移植性强,不需要依赖外部环境,但是生成的程序也会比较大
    - 动态链接:在编译阶段不会把所有库都打包到可执行程序里,在程序运行的时候通过动态连接器加载库文件,完成库文件和程序的链接、
  11. 链接完成之后找到程序入口_start
  12. 然后执行_libc_start_main()用来初始化一些应用程序的执行环境
  13. 然后才是改执行main()函数
  14. 打印helloWord
  15. 调用glibc库调用_exit()函数结束程序运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值