前些天开始常识编译android,特别不顺利,总是卡在stub-64.h这里:
害得我怀疑一直以来对x86是32位系统的认识。。。 又找了好多编译android的教程,基本也就轻描淡写的一句“make“带过。 直到找到了这篇帖子:
感慨下,要多学习阿,为啥别人能从android源码记录里准确找到问题的原因,他咋知道是这个引起的。。。路遥遥啊。。。
以下是原文:=============================================这两天心血来潮,执行完 repo sync 后,顺手来了一下 make,不料却发现了以下的错误:
兵来将挡,水来土掩,用关键字 android “error: gnu/stubs-64.h: no such file or directory” 来搜一下吧,发现搜索结果寥寥无几,看样子问题比较新,其中有一个 CSDN 的链接,就顺手点了过去。帖子反映的问题和我一模一样,不过它的分析给了我一些提醒。
从错误信息入手,追踪到/usr/include/gnu/stubs.h,看到如下代码:
顺着 WORDSIZE,进入/usr/include/bits/wordsize,发现:
结合报错的信息,可以知道这里一定是有定义__x86_64__,执行一下 uname -a 可以确认 OS 明明是x86,为什么会__x86_64__呢?追根溯源, Android 源码或许能露出蛛丝马迹。
果不其然,从 android.git.kernel.org 的 platform/external/clearsilver.git 上,看到5天前,有个 Ying Wang 的家伙提交一个修改:Fix 64-bit clearsilver shared library issue,参看这里,修改内容中 java-jni/Android.mk,和出现本次问题的路径 java-jni/j_neo_util.c,同属一个父目录,看样子有点关系,查看 Android.mk 的修改内容,发现做了如下修改:
当发现你使用Java6时,它将强制使用64-bit,我想这就能解释__x86_64__出现的原因。那么既然它要64-bit,我就满足它。首先要解决 gnu/stubs-64.h: No such file or directory,解决这个问题需要执行以下命令:
完成以后再执行 make,发现有错误:
那就继续满足它:
还是不行,又发生下面的错误:
再来执行命令:
====================================================================================
deb http://archive.ubuntu.com/ubuntu/ jaunty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-proposed main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse
2.安装java5,apt-get install sun-java5-jdk.
4.更改默认jdk的方法如下:
update-alternatives --config java
显示如下,然后键入java-1.5.0-sun的编号:
有 2 个选项可用于替换项 java (提供 /usr/bin/java)。
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自动模式
1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java 53 手动模式
2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手动模式
要维持当前值[*]请按回车键,或者键入选择的编号:1
5.查看当前的java版本:
java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Client VM (build 1.5.0_22-b03, mixed mode, sharing)
同理,更改默认的javac,方法为update-alternatives --config javac.
来源:http://i.it.blog.163.com/blog/static/119777645201068104156108/