当前位置: 代码迷 >> Android >> ubuntu 上android 源码编译 全过程(2)
  详细解决方案

ubuntu 上android 源码编译 全过程(2)

热度:105   发布时间:2016-04-28 01:47:58.0
ubuntu 上android 源码编译 全过程(二)

前面 jdk安装完成 剩下的就是下载android源码 编译了

首先装一下这些,编译用到

sudo apt-get install flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev build-essential zip curl valgrind

里面libsdl1.2-dev  libwxgtk2.8-dev是新的,不是别的书上的老的,老的源已经没有了,这些可能还不够,在编译的时候再看错误在解决吧

下载 android 源码,网上很多自己可以搜,要我的4.0.3也可以到资源里面下载。

下载放在 /Android 里面解压。

进入目录下执行

source ./build/envsetup.sh
make

然后就是等待错误解决错误,肯定有很多错误的。

首先推荐几个网站,然后把我的错误给大家贴出来 

http://wenku.baidu.com/view/5e819cddce2f0066f533228d.html

http://www.cnblogs.com/flv587/p/3503566.html

其实还是自己遇到问题查的速度快,这样在里面找很慢的。

问题一 

<built-in>:0:0: note: this is the location of the previous definition
host StaticLib: libOpenglCodecCommon (out/host/linux-x86/obj/STATIC_LIBRARIES/li
bOpenglCodecCommon_intermediates/libOpenglCodecCommon.a)
host SharedLib: libOpenglRender (out/host/linux-x86/obj/lib/libOpenglRender.so)
/usr/bin/ld: cannot find -lX11
collect2: ld returned exit status
make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so] Error 1

解决方法:$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so

问题二

[out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb]error

解决方案:

$sudo apt-get install libncurses5-dev

如果再编译不过:

$sudo apt-get install lib32ncurses5-dev

没有就先执行sudo apt-get update --fix-missing

问题三

out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt]

解决方法我先找的这个 没用貌似不过网上很多人解决了我的解决是没有把默认改为jdk1.6还是openjdk导致的。上一篇博客安装时候我就让大家修改了。
sudo ln -s /usr/lib/jvm/java-6-sun-1.6.0.06/bin/jar  /bin/jar
sudo ln -s /usr/lib/jvm/java-6-sun-1.6.0.06/bin/java  /bin/java
sudo ln -s /usr/lib/jvm/java-6-sun-1.6.0.06/bin/javac  /bin/javac
sudo ln -s /usr/lib/jvm/java-6-sun-1.6.0.06/bin/javah  /bin/javah
sudo ln -s/usr/lib/jvm/java-6-sun-1.6.0.06/bin/javadoc  /bin/javadoc
sudo ln -s /usr/lib/jvm/java-6-sun-1.6.0.06/bin/java /bin/java

问题四

[out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex] 已杀死

是系统内存不够了,直接虚拟机设置里面改为2048 以前我的事1024

或者按照人家的解决  增加虚拟内存:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=512M
mkswap  /swapfile
swapon  /swapfile

把swapfile写入/etc/fstab 文件,在后面加入/swapfile swap swap defaults 0 0

问题五

 make: *** [out/host/linux-x86/obj/lib/libGLES_CM_translator.so] 错误 1

解决方法: sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so 

在网上搜到上面的解决方法,可是按照上述方法做了,问题依旧。经过多方实验,才发现问题所在。通过apt-get install的库不是libGL.so.1.2了。而是libGL.so.1.2.0.
 
所以大家在创建链接的时候最好去/usr/lib/i386-linux-gnu/mesa/这个目录下看看libGL的库版本,不要完全按照网上的照抄。现在网上的都是“sudo 
 
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so ”我的还是1.2
 
ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0  /usr/lib/libGL.so 。可能库最近升级了。

问题六 

g++: g++: selected multilib '32' not installed  

解决

sudo apt-get install g++-multilib
sudo apt-get install libc6-dev ia32-libs lib32ncurses5-dev x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils
sudo apt-get install g++-4.4-multilib

问题七

make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

sudo apt-get install gcc-4.4

sudo apt-get install g++-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

这时会发现gcc 链接到gcc-4.6,  需要将它改为链接到gcc-4.4 :

sudo mv gcc gcc.bak

sudo ln -s gcc-4.4 gcc

同理

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

问题八

development/tools/emulator/opengl/system/gralloc/gralloc.cpp:791: warning: missing initializer for member 'gralloc_module_t::reserved_proc'

make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/gralloc.goldfish_intermediates/gralloc.o] Error 1
解决方法

/development/tools/emulator/opengl/system/gralloc
gralloc.cpp添加
getphys: NULL,

struct private_module_t HAL_MODULE_INFO_SYM = {    base: {        common: {            tag: HARDWARE_MODULE_TAG,            version_major: 1,            version_minor: 0,            id: GRALLOC_HARDWARE_MODULE_ID,            name: "Graphics Memory Allocator Module",            author: "The Android Open Source Project",            methods: &gralloc_module_methods,            dso: NULL,            reserved: {0, }        },        registerBuffer: gralloc_register_buffer,        unregisterBuffer: gralloc_unregister_buffer,        lock: gralloc_lock,        unlock: gralloc_unlock,        perform: NULL,        getphys: NULL,        reserved_proc : {NULL, }    }}
未解决
出现错误sorry, unimplemented: non-trivial designated initializers not supported

'因为这个地方注意了,gcc不支持后缀名为cpp的文件使用这种方式

你是不是用make编译的,看文档上说明,在源码目录下用./build-android编译!!!这个哥们说对了貌似,以前2.3.7make

这回拷贝的人家的android4.0.3,没有文档,原来里面有个build-android用来编译,make干嘛的我就不知道了

问题九 

host c++: libhost <= build/libs/host/pseudolocalize.cpp/bin/bash: g++: 未找到命令

make: ***[out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/pseudolocalize.o] 错误 127

 解决方法:$ sudo apt-get install build-essential

         sudo apt-get install libc6-dev-i386

问题十

/usr/include/linux/errno.h:4:23: fatal error: asm/errno.h: No such file or directoryIn file included from 
make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误 1

解决方法
ln -sv /usr/src/
linux-headers-2.6.38-8/arch/x86/include/asm  /usr/include/asm

这里红色的对应你自己的目录哦。一定要确保gcc g++ 版本一致。

如果bin/bash cc命令没有 那是因为没有软链接 cc只想gcc 用来编译C语言 g++编译c++

软连接的 进入/usr/bin   命令ln -s gcc cc


问题真多啊过程中还因为我开始创建没有分配够磁盘重新安装了一遍,我去。。。。还好做了笔记啊所以记录是一个非常好的习惯。