zoukankan      html  css  js  c++  java
  • 【转】如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)

    原文网址:http://blog.csdn.net/flydream0/article/details/7046612

    关于如何下载Android4.0的源码请参考我的另一篇文章:

    http://blog.csdn.net/flydream0/article/details/7036156

    3 开始编译

    3.1 初始化环境
    $ source build/envsetup.sh
    3.2 选择目标
    $ lunch full-eng
    大概会再现如下提示:
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=2.3.3
    TARGET_PRODUCT=full
    TARGET_BUILD_VARIANT=eng
    TARGET_SIMULATOR=false
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    HOST_ARCH=x86
    HOST_OS=linux
    HOST_BUILD_TYPE=release
    BUILD_ID=GRI40

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

    3.3 编译源码
    $ make -j4
    大概会出现如下提示:
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=2.3.3
    TARGET_PRODUCT=full
    TARGET_BUILD_VARIANT=eng
    TARGET_SIMULATOR=false
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    HOST_ARCH=x86
    HOST_OS=linux
    HOST_BUILD_TYPE=release
    BUILD_ID=GRI40
    ============================================

    Checking build tools versions...


    接下来就会编译很长时间,然而编译过程并不会是一帆风顺的,如果你的OS是32位Ubuntu 11.10,有可能会出现如下错误:

    问题1:
    现象:
    <command-line>:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
     <built-in>:0:0: note: this is the location of the previous definition
     cc1plus: all warnings being treated as errors
    make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

    原因:
    此处编译错误是由于ubuntu 11.10采用了GCC4.6.1导致的。

    解决方法:
    使用gcc4.4.6版本进行编译.

    问题2:
    现象:
    In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0: 
    external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ c-fpermissiveannot be declared ‘mutable’ [-fpermissive]
    host C++: liboprofile_pp <= external/oprofile/libpp/callgraph_container.cpp 
    make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] Error 1
    make: *** Waiting for unfinished jobs.... 

    解决:
    使用gcc4.4.6版本进行编译.


    ubuntu 11.10的gcc版本是4.6.1,版本太高,编译android时出错,要把gcc版本改为4.4.6, 4.5的版本据说可以,但没试过.
    通 过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库 。在安装gcc 4.4前该目录下是没有4.4目录的,安装gcc 4.4后该目录下就会多出4.4这个目录,且该4.4目录下有各种相应库文件。
    ubuntu 32bit系统下安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。
    sudo apt-get install gcc-4.4
    sudo apt-get install g++-4.4


    装完后在/usr/bin目录下
    $ ls -l gcc*
    lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6
    -rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
    -rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
    发现gcc 链接到gcc-4.6,  需要将它改为链接到gcc-4.4 :
    sudo mv gcc gcc.bak
    sudo ln -s gcc-4.4 gcc
    同理
    ls -l g++*
    lrwxrwxrwx 1 root root      7 2011-08-14 15:17 g++ -> g++-4.6
    -rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
    -rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
    需要将g++链接改为g++-4.4:
    /usr/bin$ sudo mv g++ g++.bak
    /usr/bin$sudo ln -s g++-4.4 g++


    再查看gcc和g++版本号:
    gcc -v
    g++ -v
    均显示gcc version 4.4.6 ,说明gcc 4.4安装成功。
    测试:
    编译android,从2011-10-29 23:58开始,到2011-10-30 01:42编译完成,没有错误。这验证了gcc 4.4安装正确,也验证了android文件与高版本的gcc不兼容。

    编译过程大概花了2+个小时.

    完成后如下图所示:

    3.4 运行

    $emulator

    注: Android4.0源码默认下载是不包括内核源码的,有关Android内核源码的下载和编译请参考我的另一篇博文:

    http://blog.csdn.net/flydream0/article/details/7070392

  • 相关阅读:
    移动端疫情展示
    第四周学习总结
    构建之法阅读笔记二
    第三周学习总结
    AJAX学习篇
    jQuery学习篇
    软件工程开课第二周——介绍篇
    【Spring】DispatcherServlet的启动和初始化
    【设计模式】模板方法模式小解
    【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4305924.html
Copyright © 2011-2022 走看看