Linux x86 编译 Android 遭遇 gnu/stubs-64.h

Linux x86 编译 Android 遭遇 gnu/stubs-64.h

这两天心血来潮,执行完 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
照此方法后出现
Could not load ‘clearsilver-jni’
不知是否因为“libclearsilver-jni.so”为64bit,在32bit系统无法加载?
最后把java,javac默认改为1.5通过了编译。
如果还是有错,需要执行如下命令:
make clean
make update-api (经测试,这个可以不需要)
make


/usr/bin/ld: cannot find -lncurses
这个问题是因为没有安装
ncurses-devel包
sudo apt-get install libncurses5-dev

error: X11/Xlib.h No such file or directory
you need to install the packages "libx11-dev" and "libglpk0-dev".

修改Java当前版本的命令:
sudo update-alternatives – –config java


---------------------------------------------------------
专注移动开发
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian

更多相关文章

  1. Android(安卓)的提权 (root) 原理是什么?
  2. android4.2 修改设置背景
  3. Android(安卓)模糊搜索rawquery bind or column index out of ra
  4. 解决Android(安卓)Studio 和 Android(安卓)SDK Manager 无法在线
  5. Android在MTP模式下,只显示指定文件夹
  6. Android(安卓)模糊搜索rawquery bind or column index out of ra
  7. 发现 developer.android.com 官网的一个单词错误:
  8. android实现字体闪烁动画的方法
  9. android Dialog大小修改

随机推荐

  1. Android 判断数据库中是否存在某个表
  2. AppCompat does not support the current
  3. android 手机判断是否在充电 如断电自动
  4. Android 四大组件之再论BroadCast
  5. Android 怎样使用已存在的Database
  6. Android(安卓)顶部状态栏覆盖到应用之上?
  7. Error:(22, 0) Could not find method an
  8. Android最便捷banner轮播图实现原理及代
  9. android实现涂鸦,保存涂鸦后的图片,清屏
  10. android改变alertdialog.builder样式