原文网址:http://blog.csdn.net/ithomer/article/details/6977386

Android编译版本:PLATFORM_VERSION=4.0.1(最新Android 4.0.1)

OS 操作系统平台: Linux yanggang 2.6.35-30-generic #61-Ubuntu SMP Tue Oct 11 15:29:15 UTC 2011 i686 GNU/Linux(Ubuntu10.10  32bit)

首先,我们先安装一些常用的工具curl:sudo  apt-get  install  curl

git:sudo  apt-get  install  git

g++:sudo  apt-get  install  g++

然后,make遇到缺什么就安装什么

/usr/bin/ld: cannot find -lz

host Executable: aapt (out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt)

/usr/bin/ld: cannot find -lz

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

解决方法: sudo apt-get install zlib1g-dev    sudo apt-get install lib64z1-dev

/bin/bash: bison: command not found

Yacc: aidl <= frameworks/base/tools/aidl/aidl_language_y.y

bison -d  -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y

/bin/bash: bison: command not found

make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127

解决方法:sudo apt-get install bison

/bin/bash: flex: command not found

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp: In function ‘int yyparse()’:

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1827: warning: deprecated conversion from string constant to ‘char*’

out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp:1970: warning: deprecated conversion from string constant to ‘char*’

Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l

/bin/bash: flex: command not found

make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127

解决方法: sudo apt-get install flex

/usr/bin/ld: cannot find -lncurses

host Executable: adb (out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb)

/usr/bin/ld: cannot find -lncurses

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1

解决方法:sudo apt-get install libncurses5-dev

fatal error: GL/glx.h: No such file or directory

development/tools/emulator/opengl/host/libs/Translator/GLcommon/GLDispatch.cpp:22: fatal error: GL/glx.h: No such file or directory

compilation terminated.

make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon_intermediates/GLDispatch.o] Error 1

解决方法:sudo apt-get install libgl1-mesa-dev

sh: gperf: not found

target Generated: libwebcore <= external/webkit/Source/JavaScriptCore/create_regex_tables

Generating CSSPropertyNames.h <= CSSPropertyNames.in

sh: gperf: not found

calling gperf failed: 32512 at ./makeprop.pl line 140.

make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h] Error 25

make: *** Deleting file `out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/css/CSSPropertyNames.h'

解决方法:sudo apt-get install gperf

上述安装,可以用一条命令完成:

sudo apt-get install git-core gnupg flex bison gperf build-essential

zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev

libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386

libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos

python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

make编译源码的错误处理:

当前Java版本高于指定版本或不是规范的Java JDK(如OpenJDK),输入“java  -version”查看JDK版本:

从上图发现,的确是由前面一键安装时安装了 openjdk-6-jdk,有两种方式可以解决:

1) 配置规范的Java SDK

解压: ./jdk-6u20-linux-i586.bin

拷贝: mv jdk1.6.0_20 /home/homer/eclipse/

配置: sudo  vi  /etc/profile

export JAVA_HOME=/home/homer/eclipse/jdk1.6.0_20

export JRE_HOME=/home/homer/eclipse/jdk1.6.0_20/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

查看验证,如下图:

2) 卸载openjdk,重新安装jdk

a)卸载openjdk

点击左上角“ubuntu“的logo, 输入 “ubuntu software center”,查找软件中心管理

然后,选择“Installed”, 输入“openjdk”, 查找已安装的 openjdk,如下图:

选择“Remove”,卸载openjdk

b)重新安装jdk

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

$ sudo apt-get update

$ sudo apt-get install sun-java6-jdk

其实,除了上述两种解决方法外,如果当前JDK版本是规范的JDK 1.6以上(如:jdk1.7.0_05,我默认用的jdk版本),也会报错说不是正确的版本。

仔细分析Makefile文件,发现其依赖关系如下:

Makefile —> build/core/main.mk —> 进行了jdk的版本判断, 脚本代码如下图:

从上图,分析代码,不难看出“openjdk“ 和 “jdk1.7.0_05” 版本编译不通过的原因了吧。。。。

(1) 如果“java -version” 中包含了“openjdk”,则 “$(shell java -version 2>&1 | grep -i openjdk)” 过滤的“openjdk”不会为空,自然其与空不等,即ifneq条件成立,因此执行“java_version :="  设置为空

(2) 如果是(1)情况,java_version为空, 自然输出错误提示信息; 如果“java -version”包含了“jdk1.7.0_05”而不是“xx1.6xx“字样,第一行过滤出来的java_version也是为空,结果也输出错误提示信息。

找出了问题,那该又如何解决呢? 知道了原理,问题就简单了(如果你和我一样使用的是“jdk1.7.0_05“及以上的1.7版本)

修改 '^java .*[ "]1.6[. "$$]'  为  '^java .*[ "]1.7[. "$$]'

最后,编译Android源码:

make  -j4

参考推荐:

自己补充:

(1)/usr/bin/ld: can't find lz

/usr/bin/ld: can't find ltinfo

/usr/bin/ld: can't find lncurse

本机ubuntu是64位的,默认安装的zlib-dev, libtinfo5-dev, libncurse5-dev都是64位版本,android源码需要这几个库的针对32位系统的版本(很奇怪!!!)

即lib32zl-dev, lib32tinfo5-dev, lib32ncurse5-dev

(2)

target thumb C++: gralloc.goldfish <= development/tools/emulator/opengl/system/gralloc/gralloc.cpp

development/tools/emulator/opengl/system/gralloc/gralloc.cpp:790: sorry, unimplemented: non-trivial designated initializers not supported

development/tools/emulator/opengl/system/gralloc/gralloc.cpp:790: sorry, unimplemented: non-trivial designated initializers not supported

development/tools/emulator/opengl/system/gralloc/gralloc.cpp:790: warning: missing initializer for member 'gralloc_module_t::reserved_proc'

make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/gralloc.goldfish_intermediates/gralloc.o] Error 1

c/c++初始化乱序

代码里面的初始化跟下面的描述一样

C++风格的乱序初始化方式跟 C风格的一样,只是它更常用在C++代码里。

eg:

struct User oneUser = {

name:"Lucy",

id:10,

home:"/home/Lucy"

};

乱序这种方式在gcc/g++中,后缀名位.c可以支持;但是后缀名为.cpp就不支持,提示

sorry, unimplemented: non-trivial designated initializers not supported

解决方法:

在android源码的根目录中执行./build-android,而不是make -j4

android源码模块编译错误,【转】Android 源码编译make的错误处理--不错相关推荐

  1. android客户端功能模块,智能巡检系统Android客户端多媒体模块的设计与实现

    摘要: Android系统是当今市场占有率最高的智能手机操作系统,其开源,免费,稳定的特点为Android应用程序的开发带来极大的便利.与此同时,随着3G时代的到来,日益提升的移动网络传输速率也使得通 ...

  2. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  3. 手把手教你在Mac OS下载、编译及导入Android源码

    1. 要求 1.1 硬件 160g可用磁盘空间. 笔者编译的是Android 9.0源码,下载下来后将近40g,编译后153g,所以至少需要160g可用磁盘空间. 看网上有别人下载编译7.1.1版本的 ...

  4. WSL Ubuntu 20.04下Android源码编译与导入Android Studio

    源码下载见前文:WSL Ubuntu 20.04下Android源码下载 idegen 模块编译 在development/tools/idegen/README下可以看到关于 idegen 工具的相 ...

  5. 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )

    文章目录 一. libwebp 源码下载 二. libwebp 源码编译脚本修改 三. libwebp 函数库编译 四.参考资料 一. libwebp 源码下载 Google 提供了一系列的 WebP ...

  6. android 例子源码_AOSP系列文章(一)-Android系统源码下载和编译

    前期准备 从这里开始,我们就去做android系统的修改,相信会有更多的同学有更多的玩法. android是开源的,在源代码里没有秘密. 同学们可以去修改系统,做成自己喜欢的样子.做汽车的车机,到家里 ...

  7. Wifi模块—源码分析Wifi启动(Android P)

    一.前言 Android P在wifi这块改动挺大的,Wifi到AndoidO之后不再使用jni,所以AndroidP也一样不再使用jni来实现Java代码与本地的C/C++代码交互,而是使用HIDL ...

  8. Android源码定制(2)——Android10.0的编译流程

    一.背景 已经在AOSP 7.1.1 nexus 5x上面实现了修改位置打卡,现在是想在pixel3中继续尝试. 作者:会飞的笨猫 二.如何选择代码 要选择有对应驱动版本的代码分支,如果没有标明,强行 ...

  9. 【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )

    文章目录 一.安卓应用构建简介 二.Java 源码编译 三.AIDL 源码编译 一.安卓应用构建简介 使用 Android Studio 开发 Android 应用时 , 编译应用后在 Module ...

  10. 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )

    文章目录 一.在 Android Studio 中创建 Native C++ 工程 二.C/C++ 源码编译过程 三.Makefile 工具 四.CMake 引入 该系列博客的应用场景是 Androi ...

最新文章

  1. 度量学习_使用Dropwizard度量标准监视和测量无功应用
  2. torch max 判断与筛选
  3. OpenCV Mat类详解
  4. nginx location 正则表达式匹配多个地址_就是要让你搞懂Nginx,这篇就够了!
  5. 彻底弄懂Qt的编码(汉字乱码问题及相关函数作用)
  6. 容器编排技术 -- Kubernetes kubectl create clusterrole 命令详解
  7. 库克也有手机瘾:每天拿起iPhone200次 比预想多一倍
  8. 限时授权复制文件 1.0(2015.9.2更新)
  9. bandicam——轻松录屏
  10. AIDL解析(一):AIDL原理解析
  11. GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism
  12. java 假设检验_据说假设检验是个很难的题
  13. 网易视频云:新一代列式存储格式Parquet
  14. PS学习笔记------运用脚本及自动化批量处理
  15. 微信小程序~textarea字数限制与计算
  16. 太阳能路灯c语言程序,基于单片机的智能太阳能路灯控制系统的设计方案
  17. JSON编辑器,在线与离线
  18. 弗吉尼亚理工计算机科学排名,弗吉尼亚理工大学计算机科学硕士排名第46(2020年TFE Times排名)...
  19. 初始化msys2环境
  20. linux服务器jdk版本查看_linux如何查看jdk版本

热门文章

  1. MAC电脑外设键盘如何更改command为control键MAC电脑外设键盘如何更改command为control键...
  2. 6846. 【2020.11.02提高组模拟】旅人1970
  3. adb命令查看手机电量_adb获取电池信息以及电量消耗信息
  4. SAP HANA XS ODATA使用参数展示数据结构
  5. 很不错的SQLite工具 SQLiteSpy
  6. 实验一:彩色空间转换(YUV2RGB)
  7. 点与直线位置关系,叉乘
  8. windows正版系统下载地址
  9. Material Design学习总结
  10. 2022浙江最新八大员之(安全员)模拟考试试题及答案