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



===============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~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章