Android 4.0.1源码编译错误记录笔记

详细教程请参考这里:http://my.oschina.net/chenshouyong/blog/94540

        编译之前,建议留有足够的磁盘空间,我下载的是4.0.1版本,11.1G源代码!!!本人之前一次编译时,home下只

剩下4G就贸然编译,结果后来 no more space,害得我只能为home扩充空间,结果搞得硬盘分区表都没了,win7+Ubuntu

双系统全部瘫痪,最后只能重装了Ubuntu,修复Win7,吃过教训后,我重装Ubuntu时,分了50G空间,网上有人建议20G,

相信也足够了.....

我编译的系统及资源配置

Ubuntu 12.04 

Android ndk-r7 

Java配置如下图:



===============2012-12-13  04:55 开始编译....==============================

配置完成后,在源代码跟目录下打开终端,运行 make -j4

Android 4.0.1源码编译错误记录笔记_第1张图片


===============2012-12-13 -5:06==================================

错误 1:

<命令行>:0:0: 警告: “_FORTIFY_SOURCE”重定义 [默认启用]
<built-in>:0:0: 附注: 这是先前定义的位置
<命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义 [-Werror]
<built-in>:0:0: 附注: 这是先前定义的位置
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1
解决办法:

修改源码目录下/build/core/combo/HOST_linux-x86.mk文件:

找到这句:

HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

修改为:

HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
如图所示: Android 4.0.1源码编译错误记录笔记_第2张图片

重新 make -j4,继续编译.......

===========2012-12-13 -5:28==============================

错误 2

/usr/bin/ld: cannot find -lz
collect2: /usr/bin/ld: cannot find -lz
collect2: ld 返回 1ld 返回 1

make: *** [out/host/linux-x86/obj/EXECUTABLES/dexdump_intermediates/dexdump] 错误 1
make: *** 正在等待未完成的任务....
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] 错误 1

最后找到原因,具体看这里 http://forum.xda-developers.com/showpost.php?s=09a4192440e3f1152cfd7e31316d9dda&p=23465431&postcount=2346

是老外的论坛,说原因是缺乏  lib32z1-dev库,在终端运行:
sudo apt-get install lib32z1-dev

即可解决!
最后重新运行 make -j4.......

==========2012-12-13 -5:37一切正常!!!===================

==========2012-12-13 -5:44==============================

错误 3:

external/oprofile/libpp/format_output.h:94:22: 错误: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 错误 1
这个比较简单,直接打开  external/oprofile/libpp/forma t_output.h这个文件,定位到 94行,删除 mutable 关键字就OK了

如图所示修改

 Android 4.0.1源码编译错误记录笔记_第3张图片


==========2012-12-13 -06:12一切正常...,希望不要再出错了=======

==========2012-12-13 -06:17==============================

错误 4 

internal/gtest-param-util.h:122:11: 错误: ‘ptrdiff_t’不是一个类型名
解决办法如下:

用编辑器打开源码目录下的 /external/gtest/include/gtest/internal/gtest-param-util.h 头文件,在头部添加上:

#include <cstddef>
坑爹呢,一句话浪费我半天时间!

make -j4 ,重新编译...

==========2012-12-13 -06:23==============================

错误 5

/usr/bin/ld: cannot find -lX11
collect2: ld 返回 1
make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so] 错误 1
解决方法: sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so 

make -j4 ,重新编译...

==========2012-12-13 -06:56==============================

错误7  out/host/linux-x86/obj/EXECUTABLES/test-librsloader_intermediates/test-librsloader] 错误 1

解决办法 :打开 /external/llvm/llvm-host-build.mk文件,在文件第一行添加

LOCAL_LDLIBS := -lpthread -ldl

错误 8

slang_rs_export_foreach.cpp:247:23: 错误: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable]
cc1plus: all warnings being treated as errors
解决办法,按照错误提示,打开  frameworks/compile/slang/Android.m k 文件,找到local_cflags_for_slang 字段,该字段原句为 

local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror
删除最后一个参数,修改为 
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter
重新编译 !

==========2012-12-13 -08:46==============================

彻底编译成功!  

从开始出错到编译成功,总共用时4个小时,消除错误两小时,编译两小时,相对而言比较快,就是各种问题太纠结了,

编译时生成的主要 镜像都在 /out/target/product/generic文件夹下面,如图:

Android 4.0.1源码编译错误记录笔记_第4张图片

system.img     ramdisk.img    userdata.img 要的就是这三个文件

不过编译过程中,生成的附带的一些中间文件就有13G!!!

 OVER~

你可能感兴趣的:(Android源码编译)