您的位置:首页 > 移动开发 > Android开发

ubuntu 14.04上面如何编译customer android 2.3

2014-10-31 18:25 363 查看
由于客户定制后的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、下载安装的源码:



如下需要下载以下包:gcc-4.6.1.tar.bz2 gmp-4.3.2.tar.bz2 mpc-0.8.1.tar.gz mpfr-2.4.2.tar.bz2

下载地址如下:

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}
wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.bz2 即可!

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



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

安装MPFR:


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:


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:


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

然后执行如下:


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

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


make && make install

安装完毕即可!然后做一个链接就可以使用GCC了

mkdir -p /data/backup/`date +%Y%m%d`

mv /usr/bin/{gcc,g++} /data/backup/`date +%Y%m%d`

新建软链接:

ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc

ln -s /usr/local/gcc/bin/g++ /usr/bin/g++

三、测试GCC

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


#!/bin/sh

##auto make install gcc

##2012-07-03

tar jxf gmp-4.3.2.tar.bz2 &&cd gmp-4.3.2/ ;./configure –prefix=/usr/local/gmp/ &&make &&make install

sleep 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

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

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/

if

[ $? -eq 0 ];then

echo “This gcc configure is success”

else

echo “This gcc configure is failed”

fi

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

make && make install

[ $? -eq 0 ]&&echo This is make install success

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

安装成功后,在/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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: