詳細教程請參考這裏: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
即可解決!
最後重新運行 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/format_output.h這個文件,定位到 94行,刪除
mutable 關鍵字就OK了
如圖所示修改
==========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.mk
文件,找到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~