zoukankan      html  css  js  c++  java
  • 编译与链接

      对于目前的应用程序开发,我们很少关注编译和链接的过程,通常都使用IDE将编译和链接一部完成,以下使对于编译和链接的过程的具体解析。

    首先,要生成机器可以识别的二进制文件,必须经过以下几个步骤:

      预处理 ------> 编译 -------> 汇编 ---------> 链接

    一、预处理

     预处理的过程主要处理源文件中以“#”开始的预编译指令。比如“#include”、“#define”等,处理规则如下:

       1、将所有的”#define“删除,并且展开所有的宏定义。

       2、处理所有条件预编译指令,比如“#if”、"#ifdef","#elif",“#else”,"#endif".

       3、将#include的文件插入到预编译指令的位置。注意,这个过程使递归进行的,因为被包含的文件中可能还包含其他文件。

         4、删除所有的注释“//”和“/* */”。

       5、添加行号和文件名标识。

       6、保留所有的#pragma编译器指令,因为编译器要使用它们。

    以下用我们熟悉的hello world程序来了解此过程:

    #include<stdio.h>
    int main()
    {
       printf("
    hello,word
    ");  
        return 0;
    }
    

    预编译命令:gcc -E hello.c -o hello.i

    二、编译

    编译过程就是把预处理完成的文件进行一系列的词法分析、语法分析、语义分析及优化后生产相应的汇编代码文件。

     使用编译命令执行hello.i文件生成汇编文件:

    gcc -S hello.i -o hello.s

     

    三、汇编

      汇编器是将hi便代码变成机器可以执行的指令,每一条汇编语句对应一条机器指令最终输出目标文件。

    gcc -c hello.s -o hello.o
    

    四、链接

    链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。

    gcc -o hello hello.o
    

    gcc常用参数:

  • 相关阅读:
    统计nginx日志里访问次数最多的前十个IP
    while 格式化输出 运算符 字符编码
    Python 软件安装
    Python 基础
    Typora 基础的使用方法
    Django ORM (四) annotate,F,Q 查询
    Django 惰性机制
    Django ORM (三) 查询,删除,更新操作
    Django ORM (二) 增加操作
    Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
  • 原文地址:https://www.cnblogs.com/yuanqiangfei/p/9412604.html
Copyright © 2011-2022 走看看