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

[zz from http://www.poemcode.net/2010/07/android-stubs-64/]

这两天心血来潮,执行完 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

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 如何在后台运行Linux命令?
  3. No.11 使用firewall配置的防火墙策略的生效模式
  4. 坑爹的minSdkVersion配置
  5. 如何加速你的gradle编译
  6. android 内存溢出oom错误的一些小见解
  7. [Android]getevent,sendevent,input命令的使用
  8. Android(安卓)Studio Cannot find local variable
  9. Ubuntu下安装配置Android(安卓)SDK

随机推荐

  1. Android布局绘制常见小问题
  2. Android开源项目第一篇――个性化控件(Vi
  3. Android(安卓)NDK 线程回调Java层方法
  4. Android(安卓)getDrawable返回ColorDrawa
  5. Android模拟器中创建和使用SDCard
  6. 【Android】模拟Android微信APK底部的Tab
  7. Android(安卓)访问权限设置
  8. AOSP和Chromium的Android(安卓)WebViewTe
  9. Android(安卓)Service最全面的解析
  10. android 视频 加密/解密(使用AES)