详细教程请参考这里: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
===============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如图所示:
重新 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
==========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了
如图所示修改
==========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文件夹下面,如图:
system.img ramdisk.img userdata.img 要的就是这三个文件
不过编译过程中,生成的附带的一些中间文件就有13G!!!
OVER~