ubuntu编译Android2.3.1报错记录
使用ubuntu14版本,编译Android2.3.1系统源码
错误一:
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] Error 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/Command.o] Error 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/StringPool.o] Error 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/Package.o] Error 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/Main.o] Error 1
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/Main.o] 错误 1
make: *** 正在等待未完成的任务....
<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定义 [默认启用]
原因:
ubuntu14版本的gcc和g++版本太高,编译2.3的android系统需要gcc4.4版本
解决方法:
1、首先安装gcc4.4和g++4.4
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
2、gcc和g++的降级
gcc降级:
sudo rm -rf /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
gcc -v
g++降级
sudo rm -rf /usr/bin/g++
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
g++ -v
错误二:selected multilib '32' not installed
g++: selected multilib '32' not installed
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] 错误 1
原因同上,安装g++-4.4-multilib即可:
sudo apt-get install g++-4.4-multilib
错误三
/bin/bash: 行 1: javadoc: 未找到命令
make: *** [out/target/common/docs/doc-comment-check-timestamp] 错误 45
解决方案:在/bin中建立javadoc的软连接
sudo ln -s /home/chenchangke/DevEnv/JDK/jdk1.6.0_38/bin/jar /bin/jar
sudo ln -s /home/chenchangke/DevEnv/JDK/jdk1.6.0_38/bin/java /bin/java
sudo ln -s /home/chenchangke/DevEnv/JDK/jdk1.6.0_38/bin/javac /bin/javac
sudo ln -s /home/chenchangke/DevEnv/JDK/jdk1.6.0_38/bin/javah /bin/javah
sudo ln -s /home/chenchangke/DevEnv/JDK/jdk1.6.0_38/bin/javadoc /bin/javadoc
错误四
/usr/bin/ld: 找不到 -lncurses
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 错误 1
解决方案:
提示这种找不到-lxxx的,都表示在编译过程中gcc找不到链接的动态库(so: shared object)。
首先需要确保系统正确安装了对应的库(库名为去掉-l,加上lib就可以了,比如-luuid其实是库libuuid)。以下以uuid为例。
通过以下命令可在ubuntu找到
#locate libuuid
然后这些库文件出现在下列位置:
/lib/i386-linux-gnu/libncurses.so.5
/lib/i386-linux-gnu/libncurses.so.5.9
/lib/i386-linux-gnu/libncursesw.so.5
/lib/i386-linux-gnu/libncursesw.so.5.9
/lib/x86_64-linux-gnu/libncurses.so.5
/lib/x86_64-linux-gnu/libncurses.so.5.9
/lib/x86_64-linux-gnu/libncursesw.so.5
/lib/x86_64-linux-gnu/libncursesw.so.5.9
注意到/lib/xxx/libncurses.so.5.9, /lib/xxx/libncurses.so.5等好多,一般可以随便选择。我选择的是/lib/x86_64-linux-gnu/libncurses.so.5.9,并为其创建库链接文件到相应路径,在terminal输入命令如下:
#sudo ln -sf /lib/x86_64-linux-gnu/libncurses.so.5.9 /usr/lib/libncurses.so
但是有时候又会跳出此lib库不匹配的问题,这是因为当尝试将64位代码与32位库链接时,通常会发生此警告。
所以把之前创建的软连接删除,然后把重新创建/lib/i386-linux-gnu/libncurses.so.5.9的软连接,如下
#sudo rm /usr/lib/libncurses.so
#sudo ln -sf /lib/i386-linux-gnu/libncurses.so.5.9 /usr/lib/libncurses.so
错误五:
dalvik/vm/native/dalvik_system_Zygote.c: In function ‘setrlimitsFromArray’:
dalvik/vm/native/dalvik_system_Zygote.c:191: error: storage size of ‘rlim’ isn’t known
dalvik/vm/native/dalvik_system_Zygote.c:214: warning: implicit declaration of function ‘setrlimit’
dalvik/vm/native/dalvik_system_Zygote.c:191: warning: unused variable ‘rlim’
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o] 错误 1
不明原因,给源码添加头文件可解决:
在dalvik/vm/native/dalvik_system_Zygote.cpp中间增加一个头文件定义#include <sys/resource.h>
#include "Dalvik.h"
#include "native/InternalNativePriv.h"
#include <sys/resource.h>
原文链接:http://www.linuxidc.com/Linux/2014-03/97761p2.htm
错误六
/usr/include/zlib.h:34: fatal error: zconf.h: 没有那个文件或目录
compilation terminated.
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libext4_utils_intermediates/output_file.o] 错误 1
解决方案:
由于系统的文件换了位置, 此时需要将 /usr/include/x86_64-linux-gnu/zconfig.h 拷贝到上级目录,此时编译才通过。
将 zconfig.h 拷贝到 /usr/include/ 目录即可