GCC编译器介绍

GCC编译器(GNG C Compiler)是GNU项目中符合ANSI C标准的编译系统,能够编译C  C++  Object C等语言编写的程序,同时GCC也是一个交叉编译器,特别使用于不同平台的嵌入式开发。

GNU:

GNU是“GNU is Not Unix"的递归缩写,1984年,史托曼开始GNU项目,这个项目的目的是创建一个自由,开放的Unix操作系统(Free UNIX),刚开始史托曼参考UNIX上面的软件,开发出功能类似的软件,在开发期间并没有看其他软件的源代码(为了避免版权纠纷),后来由于GNU软件的免费,被很多人开始使用。并在之后使用他以前写过的Emacs编译器实现一个编译二进制文件的编译器(GCC)。到了1985年,为了避免GNU所开发的自由软件被其他人所利用,所以起草了通用公共许可证(General Public Licence, GPL),其中主要观念是:版权制度是促进社会进步的手段,版权本身不是自然权利。(详细了解请进入GNU官网:http://www.gnu.org)。

ANSI C标准:C语言的第一个标准。

GCC编译过程

GCC的使用帮助

在Shell中输入man gcc可以看到有关GCC的使用帮助,下面是关于C语言和C++的参数说明。

帮助中包含一下几个参数:

1、通用参数

2、c语言参数

3、c++参数

4、object c参数

5、语言无关参数

6、警告参数

7、调试参数

8、优化参数

9、编译过程参数

10、机器依赖参数

编译过程参有如下参数:

-c____只编译不链接,生成目标文件。

-S____只编译不汇编,生成汇编代码。

-E____只预编译

-g____包含调试信息

-o file____指定目标输出文件

-ldir____搜索头文件路径

GCC编译器源代码下载及编译

进入GNU官网(www.gnu.org)可以找到GCC的源代码

我们下载一个最新的版本GCC 4.9.1 released,上面有svn检出路径,可以使用svn来check out到你的本地。

官方下载说明文档(https://gcc.gnu.org/install/download.html)中说明了GCC所依赖的类库以及工具。

将依赖的库及GCC源码下载并解压缩如下:

进入到解压后的gcc文件目录,如下:

下面我们开始执行配置文件configure

在配置LOG中我们可以看到出现了错误,错误内容如下:

在编译的时候需要的类库找不到,并且告诉了我们这些类库的最低版本要求,并提供了下载地址。下面我们来看一下这些所依赖的类库之间的关系:

gmp是GNU的多精度数字运算类库,需要依赖m4(大多数Ubuntu是默认安装的)

mpfr是多精度浮点运算的c类库,需要依赖gmp

mpc是一个复杂的高精度运算的数字运算c类库,需要依赖gmp, mpfr

gcc需要依赖上面的类库。

我们搞清楚了这些依赖关系,下面我们就开始从gmp编译开始吧。

通过./configure --help/more 查看帮助可以看到默认安装地址如下

好吧,下面我们就使用./configure命令,完成如下

接下来 使用make命令完成编译 (可能需要一段时间),等编译完成后我们执行安装命令sudo make install

使用同样的方法将其他类库编译。

将mpfr编译后/usr/local/lib目录下的文件如下(新增加了libmpfr开头的文件):

mpc编译后

最后再编译gcc文件(大概编译了1个多小时后完成)

注意:这里系统可能找不到gcc编译所需要的类库,所以我们在编译的时候加上类库路径, make --with-gmp= /usr/local/lib --with-mpfr=/usr/local/lib --with

完成后我们可以在/usr/local/bin目录下看到gcc可执行文件,如何验证这是我们自己安装的gcc而不是系统默认提供的gcc,下面我们来看看版本号:

可以看到/usr/local/bin目录下的gcc版本是4.9.1,这个正是我们下载的版本,另外我们可以看到文件的修改时间是今天。

最新文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 (13) -----第三章 查询之使用Entity SQL
  2. win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0)
  3. CSS居中初探
  4. mysql中如何把字符串转换成日期类型
  5. 定制类自己的的new_handler
  6. Use BEC to do mobile phone forensics
  7. html+css篇
  8. mybatis CRUD
  9. fzu2150(bfs)
  10. 我学的是设计模式的视频教程——辛格尔顿,生成器VS工厂方法
  11. An impassioned circulation of affection
  12. 聊一聊顺序消息(RocketMQ顺序消息的实现机制)
  13. Spring框架基础(中)
  14. rsync 文件同步和备份
  15. 电力电子MATLAB
  16. js 判断浏览器型号
  17. 【BZOJ1816】[CQOI2010]扑克牌(二分,贪心)
  18. (01背包)Buy the souvenirs (hdu 2126)
  19. php反射获取类和方法中的注释
  20. c++ 霍夫变换检测直线

热门文章

  1. 通过CURL抓取页面中的图片路径并下载到本地
  2. 最简单的基于FFmpeg的移动端例子:Android 视频转码器
  3. 删除D盘空目录 、检索大于10M的文件
  4. js32---CommonUtil.js
  5. js24---工厂模式2
  6. 新手前端笔记之--初识css
  7. BZOJ2565: 最长双回文串(Manacher)
  8. BZOJ3620: 似乎在梦中见过的样子(KMP)
  9. linux下安装sar
  10. CISP/CISA 每日一题 三