zoukankan      html  css  js  c++  java
  • 编译Android源码致命错误解决方案

    编译Android源码致命错误解决方案

    字数1506 阅读17447 评论0 

    相信各位和我一样正在研究android内核的朋友们在经过漫长的源码下载的等待后,喜悦的拿到了源代码开始编译。可是在编译过程中,也会和下载一样出现各种各样的不顺。在这里我记录了一下本人在编译过程中的所有问题,如有疏漏,欢迎朋友们指出。
    下面是按照正常编译流程记录的所需步骤和操作,可能遇到的问题会在后面讲述。

    步骤一:初始化编译环境

    首先进入android源码所在目录,然后在Linux终端执行以下命令来完成编译初始化:

    # source build/envsetup.sh

    envsetup.sh是个Linux脚本文件,它主要用来初始化一些编译命令,如:m,cgrep等等。在执行了envsetup.sh命令后可以看到终端输出如下信息:

    including device/samsung/maguro/vendorsetup.sh  
    including device/samsung/tuna/vendorsetup.sh  
    including device/ti/panda/vendorsetup.sh  
    including sdk/bash_completion/adb.bash

    在envsetup脚本中定义了一写shell函数。当我们通过souce命令执行envsetup之后,就可以在Linux终端执行这些函数。可以执行help命令来查看envsetup.sh脚本中定义的命令。

    步骤二:选择目标

    这里使用lunch命令来设置编译目标,默认为full-eng。命令如下:

    # lunch

    可以看到终端输出如下:

    You're building on Linux  
    Lunch menu... pick a combo:  
      1. full-eng  
      2. full_x86-eng  
      3. vbox_x86-eng  
      4. full_maguro-userdebug  
      5. full_tuna-userdebug  
      6. full_panda-eng  
    
    Which would you like? [full-eng]

    此时可以选择目标,默认即可。

    步骤三:编译Android源代码

    #make
    致命错误分析:

    1.oracle的java development kit都出到1.8了,可是编译Android要用的还是JDK1.6.。。。这里朋友们需要注意你的JDK版本是不是1.6,不是则无法编译。

    期间会可能会出现部分工具未安装的问题,需要按照提示安装相应软件:

    (1)提示:
    /usr/bin/ld: cannot find zlib  
    collect2: ld 返回 1  
    make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 错误 1  
    .make: *** 正在等待未完成的任务....  
    .true  
    root@mc-virtual-machine:~/android/bin/android_source#

    解决方法:这就说明系统里有部分必须的软件未安装,通过apt-get install 安装即可。其中,zlib工具包名不是zlib,而是zlib1g-dev,即:

    sudo apt-get install zlib1g-dev

    可以完成安装。

    (2)提示:
    /usr/bin/ld: cannot find  -lncurses  
    collect2: ld 返回 1  
    make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 错误 1  
    make: *** 正在等待未完成的任务....  
    true  
    root@mc-virtual-machine:~/android/bin/android_source

    解决方法:安装libncurses5-dev:i386则可以搞定~~ 如下:

    # apt-get install libncurses5-dev:i386
    (3)提示:
    cc1plus: all warnings being treated as errors  
    make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1  
    make: *** 正在等待未完成的任务....  
    root@mc-virtual-machine:~/android/bin/android_source#

    解决方法:

    gedit build/core/combo/HOST_linux-x86.mk

    其中找到HOST_GLOBAL_CFLAGS变量。修改其值为:HOST_GLOBAL_CFLAGS+=-U_FORTTFY_SOURCE -D_FORTTFY_SOURCE=0再次运行即可。

    (4)提示:
    platform_types.h:12:22: 致命错误: X11/Xlib.h:没有那个文件或目录  
    编译中断。  
    make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/main.o] 错误 1  
    make: *** 正在等待未完成的任务....  
    root@mc-virtual-machine:~/android/bin/android_source#

    解决方法: 从错误提示中很明显可以看出,是缺少x11文件,理所当然的要先安装,命令如下:

    # apt-get install x11-dev
    #(5)提示:
    致命错误: GL/glx.h:没有那个文件或目录

    解决方法:安装GL/glx.hf命令如下:

    sudo apt-get install libgl1-mesa-dev
    (6)提示:
    make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 错误 1  
    make: *** 正在等待未完成的任务....  
    root@mc-virtual-machine:~/android/bin/android_source#

    解决方法:

    $ vim frameworks/compile/slang/Android.mk

    将 local_cflags_for_slang 所在行最后的 -Werror 去掉:
    local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror 变成:
    local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter

    (7)提示:
    make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 错误 1

    解决方法:
    这里需要修改GCC和G++版本为4.4版,但是默认的一般是4.6。所以我们需要下载4.4并且将G++/GCC指令链接到4.4版本。如下:

    sudo apt-get install gcc-4.4  
    sudo apt-get install g++-4.4

    通 过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的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。

    装完后在/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  
    
    
     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

    一样的方法修改G++:

    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安装成功

  • 相关阅读:
    27. Remove Element
    26. Remove Duplicates from Sorted Array
    643. Maximum Average Subarray I
    674. Longest Continuous Increasing Subsequence
    1. Two Sum
    217. Contains Duplicate
    448. Find All Numbers Disappeared in an Array
    566. Reshape the Matrix
    628. Maximum Product of Three Numbers
    UVa 1349 Optimal Bus Route Design (最佳完美匹配)
  • 原文地址:https://www.cnblogs.com/cliuwei/p/5605789.html
Copyright © 2011-2022 走看看