Android系统开发(1)——GCC编译器的编译和安装过程
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,这个正是我们下载的版本,另外我们可以看到文件的修改时间是今天。
Android系统开发(1)——GCC编译器的编译和安装过程的更多相关文章
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- 《Android系统开发》笔记
<Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...
- Android系统开发 编译系统签名的APP
前言 一般情况下,我们使用的签名都是自己生成的Java签名来编译APP. 但是,如果需要开发一些特定设备的APP(对权限有更高的要求,需求一些系统基本的权限,比如让APP可以控制设备的休眠),那就需要 ...
- Android系统开发--灯光系统之电池灯的流程分析
Android系统开发--Android灯光系统之电池灯的流程分析 前期系统准备 运行初始化,创建系统服务 创建电池服务,获得电池灯;创建监听者监听上报电池事件: mSystemServiceMana ...
- Android系统开发实务实训
实训项目 : Android系统开发实务实训 项目成品名称: 绝地坦克 ...
- Android 系统开发做什么?
题外话 18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿.写作,实践.反 ...
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813 本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...
- 【Android 系统开发】下载 编译 Android源代码 和 Android kernel源代码
下载Android源码简要流程 : a. 获取repo文件: curl http://commondatastorage.googleapis.com/git-repo-downloads/repo ...
- 浅谈Android系统开发中LOG的使用
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...
随机推荐
- 洛谷——P1311 选择客栈
https://www.luogu.org/problem/show?pid=1311 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰 ...
- 洛谷 P1226 取余运算||快速幂
P1226 取余运算||快速幂 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod ...
- ArcGIS Api For Flex 动态画点和线
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- 史上最简单,js并获取手机型号
原先获取不了苹果系列的型号,但转换思路,先推断是否是苹果,再用分辨率获取型号 //获取手机型号函数begin function getPhoneType(){ //正则,忽略大写和小写 var pa ...
- Java学习笔记七 常用API对象三
一.泛型:简单说就是对对象类型进行限定的技术 public class GenericDemo { public static void main(String[] args){ /*泛型作为1.5版 ...
- 免费的EmBitz可替代Keil MDK开发STM32、NXP项目
一.背景 由于使用之前开发STM32是基于Keil MDK编译环境开发的,由于该软件是收费的,想用个免费开源的软件来替代Keil,EmBitz编译器是免费的,可以完全替代开发.下载程序支持J-Link ...
- 设计模式六大原则(六): 开闭原则(Open Closed Principle)
定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来: 在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不 ...
- 设计模式六大原则(一):单一职责原则(Single Responsibility Principle)
单一职责(SRP)定义: 不要存在多于一个导致类变更的原因,通俗的说,即一个类只负责一项职责. 问题由来: 类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可 ...
- 配置mysql的ODBC数据源
如果你已经安装好了mysql和mysql连接驱动,则可以向下进行了 打开控制面板,以小图标的形式查看,找到管理工具 打开管理工具,找到数据源(odbc),打开 在图片中所圈出的三个标签中随便选一个,点 ...
- JQuery滑动到指定位置
$('html, body').animate({ scrollTop: next_tip.offset().top + "px"},500);