C程序到可执行的代码流程四个阶段

        预处理阶段:宏替换、条件编译、导入头文件、处理特殊符号

通过预处理后,就会生成一个没有宏定义、条件编译、特殊符号的输出文件,此时文件被翻译成为机器指令。

gcc -E hello.c -o hello.i   //预处理把hello.c转化为hello.i文件

        编译阶段:大概就是程序的语法、词法分析,确认指令是否符合语法规则,编译后的输出文件里只有常量;eg:数字、字符串、变量的定义,main、if、else、{}、+、-等

gcc -S hello.i -o hello.s   //编译把hello.i文件转化成hello.s文件

        汇编阶段:把汇编语言代码翻译成目标机器指令的过程

gcc -c hello.s -o hello.o  //汇编把hello.s转化成汇编文件

        链接阶段:将有关的目标文件彼此相连接,比如程序中调用了某个库文件中的函数,通过链接就生成了一个可执行的文件。

gcc hello.o -o hello  //通过链接生成可执行文件

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

静态链接:就是一个目标文件的集合,其中每个文件含有库中的一个或一组相关函数代码,在这种链接方式下,函数的代码将从其所在的静态链接库中被拷贝到最终的可执行程序中,该程序在被执行时这些代码被装入到该进程的虚拟地址空间中。

动态链接:是根据可执行程序中记录的信息找到相应的函数代码。在该链接方式下,函数的代码被放在动态链接库或共享对象的某个目标文件中,链接程序时在可执行程序中记录下共享对象的名字,在可执行文件被执行时,动态链接库的内容全部映射到运行时相应进程的虚拟地址空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值