美文网首页
二、编译和链接

二、编译和链接

作者: 小虾米不爱吃虾 | 来源:发表于2016-07-14 14:42 被阅读48次
1. 源代码(hello.c)
#include <stdio.h>

int main()
{
  printf("hello world!\n");
  return 0;
}

2. 预编译过程

$ gcc -E hello.c -o hello.i

预编译过程包含如下几个关键步骤

  • #define定义的宏全部删除,并且展开所有的宏定义
  • 处理所有条件编译指令#if 、#ifdef、#elif、#else、#endif
  • 处理#inlcude预编译指令,将被包含的文件插入到该预编译的位置,这个过程可能是递归的
  • 删除所有的///* */
  • 添加行号和文件名标识,以便编译器编译或者调试的时候能输出行号信息
  • 保留所有编译器相关的指令

我们可以通过hello.i文件,判断代码里定义的宏是否正确被展开

3. 编译过程

$ gcc -S hello.c -o hello.s

hello.s 是汇编代码

4. 汇编过程

$ gcc -c hello.s -o hello.o

hello.o 是目标文件,ELF格式

5. 链接过程

ld命令可以完成链接过程


$gcc hello.c -o hello 包含了以上编译和链接的过程,直接生成了可执行文件。

相关文章

  • 二、编译和链接

    1. 源代码(hello.c) 2. 预编译过程 $ gcc -E hello.c -o hello.i 预编译过...

  • 二、编译和链接

    1. 编译的四个步骤 预处理(Propressing)编译(Compilation)汇编(Assembly)链接(...

  • 编译和链接

    编译和链接 预处理 编译 汇编 链接 预处理(prepress) 处理#开头的预编译指令。 #include:包含...

  • 编译和链接

    作为刚毕业没多久的非计算机学院出身的工科生,误打误撞的变成一个程序猿,因基础知识很薄弱,在此记录一些学习的过程。...

  • 编译和链接

    (摘自《程序员的自我修养》) 1. 被隐藏了的过程   当我们使用gcc来编译一个程序时,例如   运行结束后会生...

  • 编译和链接

    摘自《程序员自我修养》 对于平时的应用程序开发,我们很少关注编译和连接过程,因为通常的开发环境都是流行的集成开发环...

  • 2 编译和链接

    第二章 编译和链接词法分析语法分析语义分析中间语言生成目标代码生成与优化链接器 第二章 编译和链接 平时我们使用的...

  • xcode 编译 系统 深入学习(2)(待续)

    编译(通常我们说的编译包括编译和链接)报错 知识要点: 我们知道编译型语言,源文件必须经过编译(build)和链接...

  • 编译、链接、库(二)

    目录 静态库[#%E9%9D%99%E6%80%81%E5%BA%93] 编译链接[#%E7%BC%96%E8%A...

  • 第二章 编译和链接

    预处理(prepressing) 编译(compilation) 汇编(Assembly) 链接(Linking)...

网友评论

      本文标题:二、编译和链接

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