美文网首页
C语言编译流程

C语言编译流程

作者: 佟小胆胆小 | 来源:发表于2019-07-20 10:46 被阅读0次

编译就是将高级语言编写的程序转化为二进制代码可执行程序的过程

编译分为四大过程:

  • 预处理
  • 编译
  • 汇编
  • 链接

预处理(preprocessing)

  • 完成宏替换、文件引入,以及去除空行、注释等,为下一步的编译做准备
  • 其实是对各种预处理指令进行处理,包括头文件的包含、宏定义的扩展、条件编译的选择等。

我们可以使用gcc编译器对c源文件进行预处理操作

# 输入指令
gcc -E test.c -o test.i 
#将test.c源文件进行预处理输出test.i
# -E:让gcc在预处理结束后停止编译,“test.i"文件为预处理后输出的文件。
# -o:指定输出文件
预处理
预处理前的文件<test.c>大小为74bytes 预处理后的文<test.i>大小为34kb

编译(Compilation)

  • 编译的过程就是将预处理后的代码编译成汇编代码的过程。在这个阶段,首先要检查代码的规范性、是否有语法错误等,以确定代码实际要做的工作,在检查无误后,再把代码翻译成汇编语言。
  • 汇编程序执行时,先分析,后综合。分析,就是指词法分析、语法分析、语义分析和中间代码生成。综合,就是指代码优化和代码 生成。
  • 大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,也有的是先产生汇编语言一级的符号代码文件,再调用汇编程序进行翻译和加工处理,最后产生可执行的机器语言目标文件。

利用上面预处理后的test.i文件进行编译操作

# 输入指令
gcc -S test.i -o test.s
# 将预处理后的test.i文件进行编译输出test.s
# -S:让gcc在编译结束后停止编译过程,<test.s>文件为编译后生成的汇编代码。
编译

汇编(Assemble)

  • 汇编就是把编译阶段生成的 “.s” 文件转换成二进制目标代码,也就是机器代码(01序列)。
# 输入命令
gcc -c test.s -o test.o
# 将编译后生成的test.s文件进行汇编生成test.o
# -c让gcc在汇编结束后停止编译过程,"test.o"文件为汇编后生成的机器码目标文件
汇编

链接

  • 将多个目标文件以及所需的库文件链接生成可执行目标文件的过程。
# 输入命令
gcc test.o -o test
# 将test.o文件链接生成test可执行文件
# -o 本质是重命名选项。不使用-o选项时,默认生成的是a.out文件。这里生成的是可执行文件test.
链接

相关文章

  • Android NDK开发之旅8--C语言基础--预编译

    预编译(预处理include、define) C语音的执行流程 C语言执行的流程: 编译:形成目标代码(.obj)...

  • C语言跨平台移植

    C语言编译流程: C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、...

  • C语言的编译和执行过程

    没有系统的学过C语言,为了了解java编译流程。先简单的略过了一下C语言的编译过程。 C语言在Linux系统下编译...

  • 面试常问C++基础

    有关语言基础: c/c++程序的编译过程(GCC的编译流程) 强类型语言 VS 弱类型语言 数组和指针的区别 字符...

  • iOS编译原理

    主要内容: 理解C、C++以及OC的关系 编译型语言与解释型语言 编译器LLVM与CLang 理解iOS编译流程 ...

  • C语言编译流程

    编译就是将高级语言编写的程序转化为二进制代码可执行程序的过程 编译分为四大过程: 预处理 编译 汇编 链接 预处理...

  • C 语言编译流程

    C语言编译四个阶段: 预处理、编译、汇编、链接。 预处理阶段:预处理器cpp根据字符#开头的命令,修改C程序。通常...

  • 预处理命令

    C语言的执行流程 c语言执行分为三步编译:编译成目标代码(.obj)链接:将目标代码与C函数库连接合并,形成最终的...

  • 笔记01 OC 基础

    OC 是对C 语言面向对象的再封装,在实际的编译流程是这样的 oc -> c\c++ -> 汇编 -> 机器语言...

  • (一)JNI 开发流程

    JNI 开发流程 一、C 语言执行的流程 编辑:编写代码的过程。 预编译(预处理):为编译做准备工作,完成代码文本...

网友评论

      本文标题:C语言编译流程

      本文链接:https://www.haomeiwen.com/subject/pahdlctx.html