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

二、编译和链接

作者: 小虾米不爱吃虾 | 来源:发表于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 包含了以上编译和链接的过程,直接生成了可执行文件。

    相关文章

      网友评论

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

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