因為想研究一下Davik相關順便考考古所以安裝個編譯一波Android老版本源碼,發(fā)現(xiàn)問題不少,主要還是因為新編譯相關環(huán)境變動太大導致。以下是我遇到的一些坑,不過也不能保證所有人都能安裝,因為我在兩臺不同的電腦上編譯報的錯還不一樣
編譯的android 系統(tǒng)版本4和6
gcc 4.2.1
make 3.81
ubuntu 16
在安裝前應該確定自己的gcc(g++)、make、等版本。并且編譯一個hello.c和hello.cpp的64和32位版本,如果編譯不通過肯定會出問題
安裝完成后 out文件夾3.2GB
調(diào)試技巧一:在用多線程(使用了-j參數(shù))出現(xiàn)錯誤后用不使用多線程make來編譯一下,這樣錯誤會清晰一點
異常及解決方案
gcc在新linux版本上無法安裝老版本問題先嘗試添加apt源方式下載,如果不行再試試去http://old-releases.ubuntu.com/ubuntu/pool/universe/g去尋找deb包安裝
因為apt源方式能裝上全家桶且卸載容易適合反復調(diào)試問題
安裝老版本make比較簡單
下載make壓縮包解壓后輸入以下命令:
./configure
make
sudo make install
最后把make鏈接到/usr/bin或者到配置文件中添加引用
注意安裝時得先安裝上默認版本的make和gcc、g++.我當前版本是5.4
異常
localize_intermediates/localize 及后續(xù)錯誤 undefined reference to symbol 'pthread_create@@GLIBC_xx'
解決方案
在localize文件夾中修改Android.mk
將LOCAL_LDLIBS+= -lrt 修改為 LOCAL_LDLIBS+= -lrt -lpthread
異常
error:asm/errno.h:沒有那個文件或目錄
解決方案
sudo ln -s /usr/include/asm-generic /usr/include/asm
異常
找不到crti.o
解決方案
export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH
可能需要額外鏈接 /lib/x86_64-linux-gnu/libgcc_s.so.1 到 /lib/libgcc_s.so
異常
找不到lstdc++
解決方案
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so
異常
找不到asm/byteorder.h
解決方案
ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm
異常
aapt(out/host/linux-x86/obj/EXECUTABLES/aapt-intermediates/aapt).....(省略一段)
無法添加符號:DSO missing from command linie
解決方案
到aapt文件夾下(framwork下面)的Android.mk 在LOCAL_LDLIBS += -lrt 修改為 LOCAL_LDLIBS += -lrt -lpthread
異常
/usr/bin/ld: out/host/linux-x86/obj/EXECUTABLES/accRuntimeTest_intermediates/runtimeTest.o: undefined reference todlsym@@GLIBC_2.0
解決方案
system/core/libacc/tests/Android.mk
中所有模塊添加
LOCAL_LDLIBS += -ldl
異常
PreloadScanner中findEntity多次定義問題
在代碼引入HTMLEntityName那塊,注釋掉整塊后直接調(diào)用else中的代碼
異常
編譯完成后命令emulate無法調(diào)起模擬器提示:SDL init failure,reason is:No available video device
解決方案
apt安裝libsdl1.2debian:i386
異常
在ubuntu18中可能某些軟件包等級過高或其它沖突無法安裝libsdl1.2debian:i386
解決方案
安裝aptitude。使用他來自動解決軟件包沖突問題安裝缺失包