Linux x86 编译 Android 遭遇 gnu/stubs-64.h
2011-09-08 11:10
411 查看
转 : http://www.blogjava.net/TiGERTiAN/archive/2010/09/19/332423.html
这两天心血来潮,执行完 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,发现有错误:
那就继续满足它:
还是不行,又发生下面的错误:
再来执行命令:
照此方法后出现
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
这两天心血来潮,执行完 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
照此方法后出现
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
相关文章推荐
- Linux x86 编译 Android 遭遇 gnu/stubs-64.h
- 编译android2.3 x86_64 Linux Error: gnu/stub-32.h missing error and solution
- 简单描述为什么编译Android C程序所用的交叉编译工具链是arm-linux-androideabi-xx不是GNU开发的工具链arm-linux-gnueabi-xx?
- Android 4.0 x86 Linux3.0.8内核编译简介/Compile kernel for Android-x86
- [android]编译时出现/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searching for -lz错误信息
- 编译GCC-4.8出现的错误 —— Linux gnu/stubs-32.h: No such file or directory
- 解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”
- 64位linux下编译32位程序的错误“error: gnu/stubs-32.h: No such file or directory”
- 解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”
- Linux 编译应用程序报错:fatal error: gnu/stubs-soft.h: No such file or directory
- [android]编译时出现/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searching for -lz错误信息
- 在Linux x86_64环境下编译memcached
- 在Android下运行Linux平台编译的程序
- android2.2源码编译-Ubuntu10.04 (X86) + android2.2 + JDK1.6
- VLC学习(1) Linux 下编译 VLC for Android
- 搭建arm-linux-gcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)
- CMake的交叉编译问题(Linux x86 - Linux arm11)
- Android-x86入门之--源代码的下载与编译
- error: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
- Linux下使用Gradle编译Android工程时遇到的问题及解决方法