Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 600|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-8 12:13:46 | 显示全部楼层 |阅读模式

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-21 05:43 , Processed in 0.062205 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表