歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

編譯Android源碼致命錯誤解決方案

相信各位和我一樣正在研究Android內核的朋友們在經過漫長的源碼下載的等待後,喜悅的拿到了源代碼開始編譯。可是在編譯過程中,也會和下載一樣出現各種各樣的不順。在這裡我記錄了一下本人在編譯過程中的所有問題,如有疏漏,歡迎朋友們指出。
下面是按照正常編譯流程記錄的所需步驟和操作,可能遇到的問題會在後面講述。

步驟一:初始化編譯環境

首先進入android源碼所在目錄,然後在Linux終端執行以下命令來完成編譯初始化:

# source build/envsetup.sh

envsetup.sh是個Linux腳本文件,它主要用來初始化一些編譯命令,如:m,cgrep等等。在執行了envsetup.sh命令後可以看到終端輸出如下信息:

including device/samsung/maguro/vendorsetup.sh  
including device/samsung/tuna/vendorsetup.sh  
including device/ti/panda/vendorsetup.sh  
including sdk/bash_completion/adb.bash

在envsetup腳本中定義了一寫shell函數。當我們通過souce命令執行envsetup之後,就可以在Linux終端執行這些函數。可以執行help命令來查看envsetup.sh腳本中定義的命令。

步驟二:選擇目標

這裡使用lunch命令來設置編譯目標,默認為full-eng。命令如下:

# lunch

可以看到終端輸出如下:

You're building on Linux  
Lunch menu... pick a combo:  
  1. full-eng  
  2. full_x86-eng  
  3. vbox_x86-eng  
  4. full_maguro-userdebug  
  5. full_tuna-userdebug  
  6. full_panda-eng  

Which would you like? [full-eng]

此時可以選擇目標,默認即可。

步驟三:編譯Android源代碼

#make
致命錯誤分析:

1.Oracle的java development kit都出到1.8了,可是編譯Android要用的還是JDK1.6.。。。這裡朋友們需要注意你的JDK版本是不是1.6,不是則無法編譯。

期間會可能會出現部分工具未安裝的問題,需要按照提示安裝相應軟件:

(1)提示:
/usr/bin/ld: cannot find zlib  
collect2: ld 返回 1  
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 錯誤 1  
.make: *** 正在等待未完成的任務....  
.true  
root@mc-virtual-machine:~/android/bin/android_source#

解決方法:這就說明系統裡有部分必須的軟件未安裝,通過apt-get install 安裝即可。其中,zlib工具包名不是zlib,而是zlib1g-dev,即:

sudo apt-get install zlib1g-dev

可以完成安裝。

(2)提示:
/usr/bin/ld: cannot find  -lncurses  
collect2: ld 返回 1  
make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 錯誤 1  
make: *** 正在等待未完成的任務....  
true  
root@mc-virtual-machine:~/android/bin/android_source

解決方法:安裝libncurses5-dev:i386則可以搞定~~ 如下:

# apt-get install libncurses5-dev:i386
(3)提示:
cc1plus: all warnings being treated as errors  
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 錯誤 1  
make: *** 正在等待未完成的任務....  
root@mc-virtual-machine:~/android/bin/android_source#

解決方法:

gedit build/core/combo/HOST_linux-x86.mk

其中找到HOST_GLOBAL_CFLAGS變量。修改其值為:HOST_GLOBAL_CFLAGS+=-U_FORTTFY_SOURCE -D_FORTTFY_SOURCE=0再次運行即可。

(4)提示:
platform_types.h:12:22: 致命錯誤: X11/Xlib.h:沒有那個文件或目錄  
編譯中斷。  
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_renderer_intermediates/main.o] 錯誤 1  
make: *** 正在等待未完成的任務....  
root@mc-virtual-machine:~/android/bin/android_source#

解決方法: 從錯誤提示中很明顯可以看出,是缺少x11文件,理所當然的要先安裝,命令如下:

# apt-get install x11-dev
#(5)提示:
致命錯誤: GL/glx.h:沒有那個文件或目錄

解決方法:安裝GL/glx.hf命令如下:

sudo apt-get install libgl1-mesa-dev
(6)提示:
make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 錯誤 1  
make: *** 正在等待未完成的任務....  
root@mc-virtual-machine:~/android/bin/android_source#

解決方法:

$ vim frameworks/compile/slang/Android.mk

將 local_cflags_for_slang 所在行最後的 -Werror 去掉:
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror 變成:
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter

(7)提示:
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 錯誤 1

解決方法:
這裡需要修改GCC和G++版本為4.4版,但是默認的一般是4.6。所以我們需要下載4.4並且將G++/GCC指令鏈接到4.4版本。如下:

sudo apt-get install gcc-4.4  
sudo apt-get install g++-4.4

通 過gcc -v命令可以發現gcc庫在/usr/lib/gcc/i686-linux-gnu目錄下,該目錄下有當前系統支持的各種版本gcc庫 。在安裝gcc 4.4前該目錄下是沒有4.4目錄的,安裝gcc 4.4後該目錄下就會多出4.4這個目錄,且該4.4目錄下有各種相應庫文件。
Ubuntu 32bit系統下安裝gcc 4.4的最好方法是僅用以下兩條命令,不需要其它命令,否則編譯時可能會出錯。

裝完後在/usr/bin目錄下

$ ls -l gcc*
lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6  .-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4  
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6  


 lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6
 -rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
 -rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6

發現gcc 鏈接到gcc-4.6, 需要將它改為鏈接到gcc-4.4 :

 sudo mv gcc gcc.bak
 sudo ln -s gcc-4.4 gcc

一樣的方法修改G++:

ls -l g++*
lrwxrwxrwx 1 root root      7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6

需要將g++鏈接改為g++-4.4:

 /usr/bin$ sudo mv g++ g++.bak
 /usr/bin$sudo ln -s g++-4.4 g++

再查看gcc和g++版本號:

gcc -v g++ -v

均顯示gcc version 4.4.6 ,說明gcc 4.4安裝成功

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved