Ubuntu 10.10 64Bit下编译Android …

来源:互联网 发布:阿里云cdn流量怎么算 编辑:程序博客网 时间:2024/05/17 22:11

这是个老话题了,毕竟从2.3发布到现在已经有段日子了,很多人都做过同样到工作,也有很多XDJM把他们的编译过程Blog出来,以飨大家。不过这个世界上最奇妙的就是大家的幸福都是一样的,不幸确各有各的不同,在这里把自己在编译过程中遇到的各路牛鬼蛇神一一展现出来,以期与大家共同切磋,共同进步。

     整个编译过程可以归纳为一下几个问题到解决:


     1)、搭台唱戏 :为Android2.3的编译选择合适版本的操作系统

     2)、搜集粮响 :同步2.3源码,安装编译必须的库,完成必要的环境变量的设置

     3)、编译 :长达个把小时的编译过程,需要我们随时去应对可能出现的各类error,并努力解决,可谓路漫漫其修远矣

     4)、大功告成 :大家握手庆祝

下面本人从上述四个方面来全程描述我的gingerbread编译之旅。

1、搭台唱戏 :

     我只说我的平台选择之旅,本人的系统自进公司起一直用的是Ubuntu9.04,除了USB键盘驱动偶尔会失灵之外,在开发过程中系统一直比较硬巴,虽说这期间ubuntu更新了不少版本,但我独钟情9.04。时光飞逝,平静的生活终于被google的Android2.3的发布所打破,项目需要我对其进行编译,之前就听说google里面的仁兄不厚道,开发2.3的时候用的ubuntu版本比较高。不过,起初我还是抱着试试看的态度用9.04直接上,不过,系统直接向我发出下面的错误:

prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc:/lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.11' not found(required byprebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc)
prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc:/lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.11' not found(required byprebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc)

本来向升级下该库,不过尝试了几次,貌似升不上去,又听一XD说该库需更高版本的Ubuntu,没辙了,项目需要是王道,不找了,我不得不忍痛割爱,将9.04尘封起来,直接上目前最新到ubuntu10.10了。

2、搜集粮响 :

     1)、Android2.3源码下载

               到这个地方:http://source.android.com/source/download.html仔细看看“Installing Repo”,"Initializing a Repo Client","Getting thefiles"三部分内容,并照做即可。其中,在最后一步"Getting the files"时,运行:reposync后,开始进行源码同步,需要一段时间。

     2)、安装必须的库

               同样到这个地方:http://source.android.com/source/download.html仔细看看"Setting up your machine"这部分中的"UbuntuLinux(64bit)"一节的内容,并照做。注意以下几点:

             (一)、Android2.3版本名是gingerbread,所以更新的java包是java6

             (二)、在进行java6更新时,执行语句:sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntulucid partner" 可能会报错,告诉你这个东西无效或者其它啥的,不用管它,就当是浮云

             (三)、执行命令:sudo apt-get install git-core gnupg flex bison gperfbuild-essential zip curl zlib1g-dev gcc-multilib g++-multiliblibc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-devlibx11-dev lib32readline5-devlib32z-dev时,可能会报其中某些库找不到,直接把找不到的那些库从命令中删掉即可,后面编译时遇到时,再具体问题具体对待。

     3)、环境变量设置

             运行命令:exportAndroid_JAVA_HOME=$JAVA_HOME,防止编译时报缺少run-java-tool的错误。


本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-02/32454.htm

3、编译 :

     首先,还是到前面的链接下仔细阅读“Building the code”这部分内容,并照做。其中,执行:lunch时,输出下面几个选项:

     You're building on Linux
     Lunch menu... pick a combo:

         1. full-eng
         2. full_x86-eng
         3. simulator
         4. full_passion-userdebug
         5. full_crespo-userdebug

选择1即可。下面将我在执行make的过程中,遇到的错误总结如下并给出相应的解决方法:

1)、Checking build tools versions...
         build/core/main.mk:76:************************************************************
         build/core/main.mk:77: You are attempting to build on a 32-bitsystem.
         build/core/main.mk:78: Only 64-bit build environments are supportedbeyond froyo/2.2.
         build/core/main.mk:79:************************************************************
         build/core/main.mk:80: *** stop。 停止。

这个错误的原因是由于build/core/main,mk文件中默认的将Android2.3的编译定义在64bit系统上。解决方法就是将75~81行注释掉。

2)、/bin/bash: bison:找不到命令
         Checking build tools versions...
         ************************************************************
         You are attempting to build with the incorrect version
         of javac.
 
         Your version is: /bin/bash: javac:找不到命令.
         The correct version is: 1.6.

出现该错误的原因是没有进行搜索粮响 中2)中描述的内容,按照上述步骤走一遍即可。

3)、host SharedLib: libneo_cgi(out/host/linux-x86/obj/lib/libneo_cgi.so)
         /usr/bin/ld: skipping incompatible/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../libz.so when searchingfor -lz
         /usr/bin/ld: skipping incompatible/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../libz.a when searchingfor -lz
         /usr/bin/ld: skipping incompatible //usr/lib/libz.so when searchingfor -lz
         /usr/bin/ld: skipping incompatible //usr/lib/libz.a when searchingfor -lz
         /usr/bin/ld: cannot find -lz
         collect2: ld returned 1 exit status

出现这个错误的原因是由于libz这个库的版本不对,Ubuntu10.10中默认安装的是32bit的库,而Android中编译libneo_cgi.so时默认需要的是64bit的库,所以需要修改以下几个文件:

    external/clearsilver/cgi/Android.mk
    external/clearsilver/java-jni/Android.mk
    external/clearsilver/util/Android.mk
    external/clearsilver/cs/Android.m

将这些.mk文件中的

LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64

全部改成

LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32

4)、cannot find -lXXX

所有编译过程中遇到的类似这样的错误,都是缺少libXXX这样的库,解决方法就是:

首先:利用命令:apt-cache search XXX 进行库搜索

然后:找那些libXXX-dev这样的库进行安装,命令就是:sudo apt-get installlibXXX-dev

最后:继续执行make

4、大功告成

忆往昔,痛并快乐着,过程很曲折,结果很美好,编译后的结果存在与Android2.3源码根目录的out目录下


本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-02/32454p2.htm

0 0