这两天心血来潮,执行完 repo sync 后,顺手来了一下 make,不料却发现了以下的错误:
host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.c
In 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
make: *** [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
分享到:
相关推荐
在64位Linux系统下编译C语言程序时,可能会出现gnu/stubs-32.h文件不存在的错误,主要是因为缺少32位兼容包的原因。今天,我们就来探讨解决这个问题的方法。 首先,让我们了解问题的出现原因。在编译C语言程序时,...
### 在Ubuntu虚拟机下关于缺少头文件<gnu/stubs.h>的解决办法 #### 背景概述 在使用Ubuntu虚拟机进行交叉编译时,可能会遇到找不到特定头文件的问题,比如`<gnu/stubs.h>`。这种情况通常发生在尝试编译特定架构的...
在进行Ubuntu 64位系统下Android源代码的编译过程中,可能会遭遇一系列技术障碍,以下将详述在Ubuntu 11.04(64位)编译Android 2.3源码时常见的错误及其解决方案,以帮助开发者顺利通过这些难关。 ### 错误一:`/...
#### 错误1:`/usr/include/gnu/stubs.h:7:27:error: gnu/stubs-32.h: No such file or directory` **错误描述**:该错误提示表明系统中缺少必要的32位支持文件,导致编译器无法找到 `gnu/stubs-32.h` 文件。 **解决...
./hello ``` 这里,`hello.cpp`是你的C++源代码文件,`g++`命令编译代码并生成名为`hello`的可执行文件,然后运行该文件将显示"Hello, World!"。 然而,直接安装`.rpm`包可能存在依赖性问题,因为某些库或服务可能...
本文主要针对在Linux环境下编译Android 4.0.1版本源码时遇到的一些典型问题,提供详细的解决方案。 #### 二、编译环境 - **Android编译版本**:PLATFORM_VERSION=4.0.1 - **操作系统**:Linux yanggang 2.6.35-30-...
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory ``` **原因分析:** 这通常是因为编译器在尝试编译32位代码时未能找到所需的32位支持库文件。在64位系统上编译32位代码时,需要...
/usr/include/gnu/stubs-64.h \ /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ /usr/include/libio.h /usr/include/_G_config.h /usr/...