编译Android内核过程及错误分析

相信各位和我一样正在研究android内核的朋友们在经过漫长的源码下载的等待后,喜悦的拿到了源代码开始编译。可是在编译过程中,也会和下载一样出现各种各样的不顺。在这里我记录了一下本人在编译过程中的所有问题,如有疏漏,欢迎朋友们指出。

下面是按照正常编译流程记录的所需步骤和操作,可能遇到的问题会在后面讲述。

步骤一:初始化编译环境

首先进入android源码所在目录,然后在Linux终端执行以下命令来完成编译初始化:

# source build/envsetup.sh

envsetup.sh是个Linux脚本文件,它主要用来初始化一些编译命令,如:m,cgrep等等。在执行了envsetup.sh命令后可以看到终端输出如下信息:

including device/samsung/maguro/vendorsetup.shincluding device/samsung/tuna/vendorsetup.shincluding device/ti/panda/vendorsetup.shincluding sdk/bash_completion/adb.bash
在envsetup脚本中定义了一写shell函数。当我们通过souce命令执行envsetup之后,就可以在Linux终端执行这些函数。可以执行help命令来查看envsetup.sh脚本中定义的命令。

步骤二:选择目标
这里使用lunch命令来设置编译目标,默认为full-eng。命令如下:

# lunch

可以看到终端输出如下:
You're building on LinuxLunch 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-engWhich would you like? [full-eng]
此时可以选择目标,默认即可。

步骤三:编译Android源代码
#make
致命错误分析:
1.oracle的java development kit都出到1.8了,可是编译Android要用的还是1.6.。。。这里朋友们需要注意你的JDK版本是不是1.6,不是则无法编译。

期间会可能会出现部分工具未安装的问题,需要按照提示安装相应软件:

(1)提示:

/usr/bin/ld: cannot find zlibcollect2: ld 返回 1make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 错误 1make: *** 正在等待未完成的任务....trueroot@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 -lncursescollect2: ld 返回 1make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] 错误 1make: *** 正在等待未完成的任务....trueroot@mc-virtual-machine:~/android/bin/android_source
解决方法: 安装libncurses5-dev:i386则可以搞定~~ 如下:
# apt-get install libncurses5-dev:i386

(3)提示:
cc1plus: all warnings being treated as errorsmake: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1make: *** 正在等待未完成的任务....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] 错误 1make: *** 正在等待未完成的任务....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] 错误 1make: *** 正在等待未完成的任务....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.4sudo apt-get install g++-4.4

通过gcc-v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库。在安装gcc4.4前该目录下是没有4.4目录的,安装gcc4.4后该目录下就会多出4.4这个目录,且该4.4目录下有各种相应库文件。
Ubuntu32bit系统下安装gcc4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。

装完后在/usr/bin目录下
$ls-lgcc*

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

lrwxrwxrwx1rootroot72011-10-2909:11gcc->gcc-4.6
-rwxr-xr-x1rootroot2245442011-10-0605:47gcc-4.4
-rwxr-xr-x1rootroot3021042011-09-1705:43gcc-4.6
发现gcc链接到gcc-4.6,需要将它改为链接到gcc-4.4:
sudomvgccgcc.bak
sudoln-sgcc-4.4gcc
一样的方法修改G++:
ls-lg++*
lrwxrwxrwx1rootroot72011-08-1415:17g++->g++-4.6
-rwxr-xr-x1rootroot2286402011-10-0605:45g++-4.4
-rwxr-xr-x1rootroot3062002011-09-1705:39g++-4.6
需要将g++链接改为g++-4.4:
/usr/bin$sudomvg++g++.bak
/usr/bin$sudoln-sg++-4.4g++

再查看gcc和g++版本号:
gcc-v
g++-v
均显示gccversion4.4.6,说明gcc4.4安装成功。




更多相关文章

  1. 如何在Android中使用汇编语言
  2. [Android]如何做一个崩溃率少于千分之三噶应用app(5)-极速增量编译
  3. MonoDroid学习笔记(一)—— 搭建MonoDroid开发环境及Hello World
  4. Android如何防止apk程序被反编译(尊重劳动成果)
  5. APP批量自动生成各种不同分辨率尺寸图标和启动页(Android和iOS都
  6. Android(安卓)jni/ndk编程一:jni初级认识与实战体验
  7. android NDK开发整合opencv开发——环境搭建(window环境)
  8. Android插件技术——(二)加载已安装apk
  9. 升级android studio后编译的应用短暂白屏

随机推荐

  1. Android(安卓)分享实现,微信、微博、腾讯
  2. Android(安卓)IPC进程间通信详解最新Andr
  3. android实习生面经
  4. PHP变量数据类型,变量和常量的定义以及数
  5. 今日报错系列:未定义的SYSTEMTIME
  6. 什么最宝贵呢?
  7. 初识PHP变量与常量
  8. php的变量&常量
  9. HCIA-子网划分
  10. 跟自己的战斗