ubuntu 14.04上面如何编译customer android 2.3

由于客户定制后的android2.3需要wine支持,而服务器不允许安装wine组件,所以只有在本机上搭建环境来编译android2.3了;有点悲催的是,新装的ubuntu机器是14.04 的,跟古老的android 2.3 相比,简直太新潮了,以至于很多组件不相容。所以现在只有遇到问题解决问题了。
   一, 安装必要的文件

Install the required packages and tools.
$ sudo apt-get install git gnupg flex bison gperf build-essential \
libgmp10 autoconf  automake libtool xmlto  sqlite3\
zip curl libc6-dev libncurses5-dev x11proto-core-dev \
libglapi-mesa
libgl1-mesa-dri \
libx11-dev libreadline6-dev libgl1-mesa-glx \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev
$ sudo apt-get install xutils-dev binutils-dev
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-
gnu/libGL.so
$sudo ln -s /usr/lib/x86_64-linux-gnu/libgmp.so.10 /usr/lib/libgmp.so
$sudo ln -s /usr/lib/x86_64-linux-gnu/libgmp.so.10 /usr/lib/libgmp.so.3

二,首先编译kernle部分

/home/xxx/public/workspace/prebuilt/linux-x86_64/toolchain/linaro-201105-csr-build-armv7-vfpv3/bin/../libexec/gcc/arm-none-linux-gnueabi/4.5.4/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory

      原因是: 14.04安装的libmpc 版本太高了,没有libmpc.so.2 只有 libmpc.so 和 libmpc.so.3
  所以要安装合适的版本,另外 libmpc 依赖于其他的组件 GMP和MPFR。
  所以需要安装合适版本的组件,我用的libmpc-0.9 的,安装后包含 libmpc.so.2
  如果是libmpc-1.0+的,只包含 libmpc.so.3 和libmpc.so 了。
  至于从何地址下载安装这些组件,我参考以下博文(从网上摘抄):
  GCC编译需要GMP, MPFR, MPC这三个库,这三个包可以从下面的地址下载:
           GMP: http://gmplib.org/
   MPFR: http://www.mpfr.org/
   MPC: http://www.multiprecision.org/index.php?prog=mpc&page=download
=========================================

需要把目前gcc-4.4.4升级到gcc-4.6.1,考虑到有多台的原因,做了一个脚本自动安装结合批量工具分发。

一、安装环境
系统版本:centos6.0X64
原GCC版本:gcc-4.4.4
新GCC版本:gcc-4.6.1

二、正式安装
1、下载安装的源码:

 
  
  1. 如下需要下载以下包:gcc-4.6.1.tar.bz2 gmp-4.3.2.tar.bz2 mpc-0.8.1.tar.gz mpfr-2.4.2.tar.bz2  
  2. 下载地址如下:  
  3. wget ftp://gcc.gnu.org/pub/gcc/infrastructure/{gmp-4.3.2.tar.bz2,mpc-0.8.1.tar.gz,mpfr-2.4.2.tar.bz2}  
  4. wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.bz2 即可!

2、解压安装:安装有先后顺序:GMP、MPFR、MPC、GCC

 
  
  1. 安装GMP:  tar jxf gmp-4.3.2.tar.bz2 &&cd gmp-4.3.2/ ;./configure –prefix=/usr/local/gmp/ &&make &&make install

安装MPFR:

 
  
  1. cd ../ ;tar jxf mpfr-2.4.2.tar.bz2 ;cd mpfr-2.4.2/ ;./configure –prefix=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install

安装MPC: 

 
  
  1. cd ../ ;tar xzf mpc-0.8.1.tar.gz ;cd mpc-0.8.1 ;./configure –prefix=/usr/local/mpc –with-mpfr=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install

安装GCC:

 
  
  1. cd ../ ;tar jxf gcc-4.6.1.tar.bz2 ;cd gcc-4.6.1 ;./configure –prefix=/usr/local/gcc –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++ –with-gmp=/usr/local/gmp –with-mpfr=/usr/local/mpfr/ –with-mpc=/usr/local/mpc/ &&make &&make install

然后执行如下:

 
  
  1. export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/

//这一步很关键,设置变量,不设置后面会报错。

 
  
  1. make && make install  
  2.  
  3. 安装完毕即可!然后做一个链接就可以使用GCC了  
  4.  
  5. mkdir -p  /data/backup/`date +%Y%m%d`  
  6.  
  7. mv /usr/bin/{gcc,g++}      /data/backup/`date +%Y%m%d`  
  8.  
  9. 新建软链接:  
  10.  
  11. ln -s /usr/local/gcc/bin/gcc          /usr/bin/gcc  
  12.  
  13. ln -s /usr/local/gcc/bin/g++          /usr/bin/g++

三、测试GCC
直接输入gcc -v 可以查看到gcc 版本为4.6.1和相关的编译参数就ok了!
附上一个最简单的安装脚本:

 
  
  1. #!/bin/sh    
  2. ##auto make install gcc    
  3. ##2012-07-03    
  4. tar jxf gmp-4.3.2.tar.bz2 &&cd gmp-4.3.2/ ;./configure –prefix=/usr/local/gmp/ &&make &&make install    
  5.     
  6. sleep 1    
  7. cd ../ ;tar jxf mpfr-2.4.2.tar.bz2 ;cd mpfr-2.4.2/ ;./configure –prefix=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install    
  8.     
  9. cd ../ ;tar xzf mpc-0.8.1.tar.gz ;cd mpc-0.8.1 ;./configure –prefix=/usr/local/mpc –with-mpfr=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install    
  10.     
  11. cd ../ ;tar jxf gcc-4.6.1.tar.bz2 ;cd gcc-4.6.1 ;./configure –prefix=/usr/local/gcc –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++ –with-gmp=/usr/local/gmp –with-mpfr=/usr/local/mpfr/ –with-mpc=/usr/local/mpc/    
  12.     
  13. if    
  14. [ $? -eq 0 ];then    
  15. echo “This gcc configure is success”    
  16. else    
  17. echo “This gcc configure is failed”    
  18. fi    
  19. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/    
  20.     
  21. make && make install    
  22.     
  23. [ $? -eq 0 ]&&echo This is make install success
  24. =================================================================
安装成功后,在/etc/lib中输入以下命令建立链接:
 ln -s -f /usr/local/mpc/lib/libmpc.so libmpc.so
         ln -s -f /usr/local/mpc/lib/libmpc.so.2 libmpc.so.2

三, 编译android部分,必须安装JDK
   android 2.3 要求安装JDK 1.6.
  ============================================
Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version
of java.
 
Your version is: java version "1.7.0_71".
The correct version is: 1.6.
 
Please follow the machine setup instructions at
    http://source.android.com/download
************************************************************
build/core/main.mk:118: *** stop.  Stop.
lisa@lisa:~/public/RT/android$ java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

安装方法(参考网上方案):

 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk6u35-downloads-1836443.html

        下载的是:  jdk-6u35-linux-x64.bin  (64位的)

2、改变权限   chmod u+x jdk-6u35-linux-i586.bin

3、解压      ./jdk-6u35-linux-x64.bin        解压出来目录是   jdk1.6.0_35

4、为JDK新建存放目录        sudo mkdir -p /usr/lib/jvm/

5、将解压出来的 jdk1.6.0_35 目录拷贝到新目录   sudo cp -r jdk1.6.0_35/ /usr/lib/jvm/jdk1.6.0_35/

6、配置环境变量:

    $ sudo gedit /etc/profile

     在文件的末尾加上如下内容,保存并关闭文件

# for java

export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_35

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH

7、使设置生效:到此部JDK的配置就都完成了

 

    $ source /etc/profile

 

8、测试

    java -version
java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01, mixed mode)
9、至此完成JDK在ubuntu 14.04 64位上JDK1.6的安装

=========== 检查版本是否生效,可以用以下命令:==============
  ** 检查新的版本是否生效。

Ubuntu系统默认安装并使用OpenJDK(usr/lib/jvm/),因此需要手动修改系统默认的JDK,

sudo update-alternatives --install /usr/bin/javac javac /home/your_name/Tools/jdk1.7.0_51/bin/javac 300

sudo update-alternatives --install /usr/bin/java java /home/your_name/Tools/jdk1.7.0_51/bin/java 300

sudo update-alternatives --config javac,再选择相应的Priority 300

sudo update-alternatives --config java,再选择相应的Priority 300

至此配置完成,输入java -version、javac或java检查是否配置成功。 

===========================================

另外在编译过程中,根据环境不同,可能有些遗漏的库需要安装,

可以通过 apt-get install 安装必要的组件。这个只有见招拆招了。


 四,编译错误处理·(此部分是摘抄网上博客)

【Android源代码编译】Ubuntu13.04编译android 2.3源代码时出现了以下错误dalvik/vm/native/dalvik_system_Zygote.c:In function ‘setrlimitsFromArray’:
dalvik/vm/native/dalvik_system_Zygote.c:192: error: storage size of ‘rlim’isn’t known
dalvik/vm/native/dalvik_system_Zygote.c:215: warning: implicit declaration offunction ‘setrlimit’
dalvik/vm/native/dalvik_system_Zygote.c:192: warning: unused variable ‘rlim’

This error is because 2 header filesare needed while calling setrlimit function:
#include <sys/time.h>
#include <sys/resource.h>

You can check by typing "mansetrlimit":

GETRLIMIT(2) Linux Programmer'sManual GETRLIMIT(2)

NAME
getrlimit, setrlimit, prlimit - get/set resource limits

SYNOPSIS
#include <sys/time.h>
#include <sys/resource.h>

Anyway, I raise this issue to modifydalvik/vm/native/dalvik_system_Zygote.c file with the following include file:

$vi android/dalvik/vm/native/dalvik_system_Zygote.c

#include <sys/time.h>

#include <sys/resource.h>

修改后可以在ubantu13.04上可以编译通过,并且 ubuntu10.04 和 ubuntu12.04都也可以编译通过,没有影响


安装编译所需的软件包:

1  $ sudo apt-get install git-core gnupg flex bison gperf build-essential  zip curl libc6-dev libncurses5-dev x11proto-core-dev    libx11-dev libreadline6-dev libgl1-mesa-glx  libgl1-mesa-dev g++-multilib mingw32 tofrodos    python-markdown libxml2-utils xsltproc zlib1g-dev libreadline6-dev gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib

2 $ sudoln -s /usr/lib/i386-linux-gnu/libX11.so.1 /usr/lib/i386-linux-gnu/libX11.so

如果你系统默认的gcc g++是4.7不是4.4的,会产生很多莫名其妙的编译失败,可能是你的gcc使用的比较高,gcc --version 查看下,不是4.4的话修改如下:3 $cd /usr/bin/

$sudo mv gcc gcc.bak

$sudo ln -s gcc-4.4 gcc

$sudo mv g++ g++.bak

$sudo ln -s g++-4.4 g++

4.java python 等

================================参考文章 ========================

我的系统是Ubuntu 13.04 64bit

编译碰到了各式各样的问题 我这里给出一些链接 都是我碰到问题的时候参看的

frameworks/base/include/utils/KeyedVector.h:193:31: 附注: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/CrunchCache.o] 错误 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/Command.o] 错误 1

第一个问题 解决方式是对gcc 和g++ 降级

1、首先安装gcc4.4和g++4.4

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.42

gcc和g++的降级gcc降级:

sudo rm -rf /usr/bin/gcc

sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc

gcc -v

g++降级

sudo rm -rf /usr/bin/g++

sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++

g++ -v

这里会碰到由2个GCC 与G++

host Executable: cmu2nuance (out/host/linux-x86/obj/EXECUTABLES/cmu2nuance_intermediates/cmu2nuance)
        /usr/bin/ld: cannot find -lncurses
        collect2: ld returned 1 exit status 
        make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1
        make: *** Waiting for unfinished jobs....
        host Executable: coverage (out/host/linux-x86/obj/EXECUTABLES/coverage_intermediates/coverage)

这个问题我也碰到了 安装后解决


        安装libncurses5-dev:i386可以解决

        sudo apt-get install libncurses5-dev:i386

dalvik/vm/native/dalvik_system_Zygote.cpp: In function ‘int setrlimitsFromArray(ArrayObject*)’:dalvik/vm/native/dalvik_system_Zygote.cpp:199:19: error: aggregate ‘setrlimitsFromArray(ArrayObject*)::rlimit rlim’ has incomplete type and cannot be defined    struct rlimit rlim;


dalvik/vm/native/dalvik_system_Zygote.cpp:222:43: error: ‘setrlimit’ was not declared in this scope        err = setrlimit(contents[0], &rlim);


make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o] Error 1make: *** Waiting for unfinished jobs....

所以,这个问题只能修改源代码来解决

在dalvik/vm/native/dalvik_system_Zygote.cpp中间增加一个头文件定义#include <sys/resource.h>

#include "Dalvik.h"


#include "native/InternalNativePriv.h"


#include <sys/resource.h>

Android(4.0)编译错误:usr/bin/ld: cannot find libncurses.so.5 cannot find -lGL

$sudo apt-get installlibx11-dev:i386(libX11.so)

$ sudo apt-get installibgl1-mesa-glx:i386(libGL.so)

由于libGL.so系统默认没有进行库路径下的链接,还需要手动链接一下

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so 
安装这2个解决

基本就是这些问题 中国上GOOGLE比较困难 大家相互帮组吧

另外下载GMP的网址如下, 这个网址可以下载ubuntu官方各种包:

https://launchpad.net/ubuntu/precise/+source/gmp


你可能感兴趣的:(ubuntu 14.04上面如何编译customer android 2.3)