当前位置:首页 > 编程开发

android编译时找不到stub-64.h的问题

webgou16年前 (2010-08-09)编程开发784

前些天开始常识编译android,特别不顺利,总是卡在stub-64.h这里:

“ host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.cIn file included from /usr/include/features.h:378, from /usr/include/string.h:26, from external/clearsilver/java-jni/j_neo_util.c:1:/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: No such file or directory ” 郁闷之极,uname -m看明明是i686阿!
害得我怀疑一直以来对x86是32位系统的认识。。。
 
又找了好多编译android的教程,基本也就轻描淡写的一句“make“带过。
 
直到找到了这篇帖子:

感慨下,要多学习阿,为啥别人能从android源码记录里准确找到问题的原因,他咋知道是这个引起的。。。
路遥遥啊。。。

以下是原文
=============================================

这两天心血来潮,执行完 repo sync 后,顺手来了一下 make,不料却发现了以下的错误:

host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.cIn file included from /usr/include/features.h:378,        from /usr/include/string.h:26,		from external/clearsilver/java-jni/j_neo_util.c:1:/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: No such file or directorymake: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver-jni_intermediates/j_neo_util.o] Error 1

兵来将挡,水来土掩,用关键字 android “error: gnu/stubs-64.h: no such file or directory” 来搜一下吧,发现搜索结果寥寥无几,看样子问题比较新,其中有一个 CSDN 的链接,就顺手点了过去。帖子反映的问题和我一模一样,不过它的分析给了我一些提醒。

从错误信息入手,追踪到/usr/include/gnu/stubs.h,看到如下代码:

#if __WORDSIZE == 32# include <gnu/stubs-32.h>#elif __WORDSIZE == 64# include <gnu/stubs-64.h>#else# error "unexpected value for __WORDSIZE macro"#endif

顺着 WORDSIZE,进入/usr/include/bits/wordsize,发现:

#if defined __x86_64__# define __WORDSIZE	64# define __WORDSIZE_COMPAT32	1#else# define __WORDSIZE	32#endif

结合报错的信息,可以知道这里一定是有定义__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 的修改内容,发现做了如下修改:

+# This forces a 64-bit build for Java6+ifneq ($(filter 1.6%,$(java_version)),)+    LOCAL_CFLAGS += -m64+    LOCAL_LDFLAGS += -m64+endif

当发现你使用Java6时,它将强制使用64-bit,我想这就能解释__x86_64__出现的原因。那么既然它要64-bit,我就满足它。首先要解决 gnu/stubs-64.h: No such file or directory,解决这个问题需要执行以下命令:

[xuhj@eniac mydroid]$ apt-get install libc6-dev-amd64

完成以后再执行 make,发现有错误:

/usr/bin/ld: cannot find -lstdc++

那就继续满足它:

[xuhj@eniac mydroid]$ apt-get install g++-multilib lib64stdc++6

还是不行,又发生下面的错误:

/usr/bin/ld: cannot find -lz

再来执行命令:

[xuhj@eniac mydroid]$ apt-get install lib64z1-dev

====================================================================================

补充:
    按照上面的办法有个地方还是报错,后来把几个Android.mk中的 -m64 的地方给注释掉了,它们在这里:
external/clearsilver/cgi
external/clearsilver/java-jni
external/clearsilver/util
external/clearsilver/cs
 
    准备再编一次,这次使用java5,弄好了继续更新
  1.编辑/etc/apt/sources.list文件,将安装源更改为ubuntu 9.04的安装源为:
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/

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=262

标签: androidos
分享给朋友:

“android编译时找不到stub-64.h的问题” 的相关文章

Android术语列表概览

1,apk扩展名:apk是Android包的扩展名,一个Android包包含了与某个Android应用程序相关的所有文件,apk文件将 AndroidManifest.xml文件、应用程序代码(dex文件)、资源文件和其他文件组成一个压缩包,一个项目只能打包压缩成一个apk文件。2, dex扩展名:…

技术的问题,可用网站

很多问题是可以能过搜索引擎来找到答案的.今天看到一篇文章里面的网站很有用,转过来用了.…

工作中的小失误原因分析

在工作中,测试发现的一个问题,追其原因是----把代码同步错了.这几天心中一直在想,如何尽量避免这样的小错误.那有又哪些原因呢? 罗列下原因: 1.在写程序时,被打断次数太多,临时追加任务就很容易出错. 2.去调车,在太阳下晒一两天,我想基本上是没心事再去总结问题或是写代码. 3.变化时刻存在:领…

Android模拟器skin制定方式详解

Android手 机操作系统可以通过在模拟器中的一些相关操作来进行相应的修改已满足大家的需求。在这里就先为大家详细介绍一下有关Android模拟器的具体概念。 Android模拟器skin总共有四个标准的制定方式,分别对应HVGA(横屏/竖屏)和QVGA(横屏/竖屏),我们只要在启动模拟器时使用…

java中四种操作xml方式的比较

转自[http://java.chinaitlab.com/XMLBeans/717370_2.html]注:[http://www.open-open.com/31.htm]1. 介绍    1)DOM(JAXP Crimson解析器)  &nbs…

练习的mysql语句

 例子:将cdb_pms表subject字段中的Welcom to替换成 欢迎光临UPDATE `cdb_pms`SET `subject` = REPLACE(`subject`, 'Welcome to', '欢迎光临')WHERE INSTR(`subject`,'Welcome t…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。