程序编译流程

Posted djzny

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序编译流程相关的知识,希望对你有一定的参考价值。

可以讲编程语言划分为两大类:
  • 编译型语言
    • 运行前,先由编译器将高级语言的代码编译成对应机器的cpu汇编指令,然后再有汇编器汇编为目标机器码,生成可执行文件,然后运行最终生成的可执行文件
  • 解释型语言
    • 运行时,由翻译器将高级语言代码反应成中间代码,并由解释器将该中间代码解释成机器码并执行,相当于编译和执行二合一
 
编译一个C程序分为四个阶段:
1、预处理阶段
2、生成汇编代码阶段
3、汇编阶段
4、链接阶段
 
技术分享图片
ps:也就是说,gcc会生成汇编的.o文件,然后通过链接,生成.out文件
 
编译的主要步骤有:词法分析->语法分析->语义分析及相关的优化->中间代码生成->目标代码生成(汇编文件.s)
 
关于gcc、g++和gdb
linux中,使用gcc来编译c程序,用g++来编译c++程序,用gdb来调试程序
安装g++:
yum install gcc-c++
安装gcc:
yum install gcc
安装gdb:
yum install gdb
 
为什么编译成汇编代码?
一般的编译器,是先将高级语言转换成汇编代码(中间代码),然后在汇编的基础上优化成OBJ目标代码,最后link成可执行文件
 
  • C#是一种二次编译语言,首先是通过编译器将C#编译成IL文件,然后通过CLR将IL文件编译成机器码文件,这种机器文件也只能适用于特定的CPU才可以运行。
  • java号称一次编译,到处运行,他也是先通过编译器将java文件编译成javac文件,然后需要运行的时候再通过虚拟机jvm将中间代码翻译成特定目标平台的机器码文件,不同的cpu的机器只需要安装对应的虚拟机便可以执行同一份java代码,所以java是一种先编译后解释的语言。
 
 
参考资料:
https://blog.csdn.net/sholck222/article/details/72724377/(编译和解释的区别是什么?

以上是关于程序编译流程的主要内容,如果未能解决你的问题,请参考以下文章

gcc编译程序的流程

程序编译流程

GCC编译流程

用C语言构建一个可执行程序的流程!

TXT编写程序-编译-执行流程

在 GitLab CI Docker 工作流程中应该在哪里编译 c++ 应用程序?