• 编译链接概论


    • 预编译
    • 编译
    • 汇编
    • 链接

    预编译

    • 处理以#开头的预编译指令
      • gcc -E hello.c -o hello.i /g++ hello.c > hello.i
      • 删除#define, 展开宏定义
      • 处理条件预编译 #if。。。。
      • 递归处理#include,
      • 删除注释
      • 添加行号和文件名
      • 保留所有的#pragma, 编译器要使用

    编译

    • gcc -S hello.i -o hello.s //生成汇编
    • 词法分析
    • 语法分析
    • 语义分析
      • 分析静态语义,动态语义运行时才能确定
    • 中间语言生成
      • 源代码级别的优化 比如 1 + 2 直接标识成3
    • 目标代码生成与优化
      • 代码生成器:中间语言转换为目标机器代码,生成汇编代码,依赖机器属性
      • 优化汇编

    汇编

    • gcc -c hello.s -o hello.o
    • 生成二进制机器语言

    链接

    • 地址和空间分配, 符号决议,符号重定位
    • 静态链接过程
      • main引用其他模块的函数符号,链接器根据符号名(函数签名)自动去相应模块找该函数地址,然后重新修正main函数中该函数的地址;
  • 相关阅读:
    第01组 Alpha冲刺 (1/6)
    第01组(17) 需求分析报告
    第01组(17) 团队展示
    结对编程作业
    05 RDD编程
    第九次作业
    HDFS
    Hadoop安装 与 HDFS体系结构
    第三次作业
    作业2
  • 原文地址:https://www.cnblogs.com/sfth/p/10765278.html
Copyright © 2020-2023  润新知