gcc前端的基本结构
来源:互联网 发布:小额贷款全部软件 编辑:程序博客网 时间:2024/06/04 07:38
原文
对于gcc的一些概念,一直都比较模糊。在使用上我们都知道编译c时使用gcc命令,编译c++时使用g++命令;gcc也可以用来编译c++,gcc与g++在使用上的主要区别是g++会自动连接stdc++库。这些使用上的概念使得gcc的前端显得有些混乱。在网上查找有关gcc于g++的关系,有的说gcc会在内部调用g++,有的说g++调用gcc,但都没有更明确的解释他们之间的关系。
要想在结构上了解gcc前端,就只有查看gcc源码,自己找答案了。
Compiler Driver
在gcc中,我们使用的gcc和g++命令,以及其他语言的命令(gccgo),都被称作compiler driver。他们本身并不做具体的编译工作,而是用来解析命令行参数,调用具体的编译器和其他工具来驱动整体的编译过程。无论使用gcc或者g++,我们都可以通过-v参数显示整体构建过程。在这个过程中我们会看到对于真正的编译器cc1(c compiler)或者cc1plus(c++ compiler)的调用,以及对于as(汇编器)和collect2(连接器)的调用。
Compiler Driver的代码基本结构如下:
我们可以看到,gcc和g++可执行程序都使用gcc.c中的main函数作为入口函数。他们真正的区别在于gcc包含了gccspec.c文件,而g++包含了g++spec.c文件。在这两个文件中,分别实现了lang_specific_driver函数。这个函数被这个compiler driver框架用来在命令行参数处理前添加特殊的标志。对于stdc++的默认连接就是在g++spec.c中处理的。
所以,gcc与g++都是基于同一套compiler driver框架,大部分功能都是一样的,只有很小的不同。
Compiler Proper
正如上面提到的,gcc和g++只是compiler driver,而真正的c和c++编译器是另外两个可执行程序,cc1和cc1plus,他们被称作compiler proper,负责真正的编译工作。
Compiler Proper的基本结构如下:
同样,cc1和cc1plus都使用main.c中的main函数作为入口函数,共享同一个编译器框架。cc1与cc1plus分别通过c-lang.c和cp-lang.c提供一个lang_hooks结构体,作为编译器框架对于语言的回调处理。
经过上述分析,我们可以对gcc的前端结构有一个大体的认识。对于说gcc调用g++,或者g++调用gcc,都是不准确的。
参考:GCC_frontend.pdf
- gcc前端的基本结构
- gcc前端的基本结构
- gcc的基本使用方法
- gcc的基本使用
- gcc的基本操作
- GCC的基本操作
- gcc的基本命令
- GCC的基本用法
- GCC 编译器的基本使用
- GCC最基本的用法
- gcc 基本的编译选项
- 1.gcc的基本使用
- Linux的GCC基本用法
- GCC最基本的用法
- 有关GCC的基本用法
- 前端学习基本的PS
- 类的基本结构
- XQuery的基本结构
- hibernate hql like 查询有特殊字符
- 设计模式十一(桥接模式,python 语言实现)
- 深入浅出单实例Singleton设计模式
- 系列一版本管理软件简介
- 第十五周上机任务-项目4
- gcc前端的基本结构
- 如何用PowerDesigner逆向工程导出ORACLE数据库表
- C++内联函数
- 百度面试
- linux逻辑运算符,逻辑表达式详解
- python input的用法1
- mysql基本语法
- 系列二VS项目软件配置工具介绍
- android配置开发环境