在64位ubuntu上编译kitkat4.4时遇到HashSet_jni.h错误导致编译中止的问题
2014-12-18 16:05
417 查看
/article/1426001.html
在64位ubuntu上编译katkit4.4时经常遇到以下错误导致编译中止,困扰了很长时间才解决此问题,尝试过几种不同的方法,最后总算找到了根本原因。
先看下错误现象,提示HashSet_jni.h error。
错误现象:
In file included from externalromium_org/content/common/android/hash_set.cc:5:0:
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:10:26: error: extra tokens at end of #ifndef directive [-Werror]
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:11:26: error: missing whitespace after the macro name [-Werror]
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:24:20: error: expected initializer before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:26:17: error: expected initializer before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:29:22: error: expected '{' before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:29:22: error: expected unqualified-id before '<' token
externalromium_org/content/common/android/hash_set.cc:30:1: error: expected '}' at end of input
cc1plus: all warnings being treated as errors
make: *** [out/target/product/xxx/obj/STATIC_LIBRARIES/content_content_common_gyp_intermediates/content/common/android/hash_set.o] 错误 1
错误原因:
导致此问题的原因就是在ubuntu每天弹出的更新时选择了默认全部更新,导致原先系统自带的openjdk又安装上了,并且变成了默认的javap。
虽然每次检查java -version都显示是自己配置的java jdk1.6,但没有注意到javap已经改变。后来无意中在网上看到javap,才想起检查自己的默认javap是否正确。
先介绍下javap是什么呢?
javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。
详细介绍请参考:
javap(反汇编命令)详解
那么如何修改javap呢?
使用 sudo update-alternatives --config javap 命令即可以查看修改javap使用的默认版本,可以根据提示选择默认的版本。
如果自己安装的jdk的javap不存在,则可以通过以下方法添加javap
sudo update-alternatives --install /usr/bin/javap javap /home/ameyume/jdk1.6.0_45/bin/javap 300
再次执行 sudo update-alternatives --config javap 设置默认的javap即可。注:如果只有一个可选的话,则不会显示列表,即无需处理。
配置javap的命令用法:
sudo update-alternatives --config javap
[sudo] password for ameyume:
有 2 个候选项可用于替换 javap (提供 /usr/bin/javap)。
选择 路径 优先级 状态
------------------------------------------------------------
0 /usr/lib/jvm/java-6-openjdk-amd64/bin/javap 1061 自动模式
* 1 /home/ameyume/jdk1.6.0_45/bin/javap 300 手动模式
2 /usr/lib/jvm/java-6-openjdk-amd64/bin/javap 1061 手动模式
要维持当前值[*]请按回车键,或者键入选择的编号:
另外,还要确认java和javac是否是使用的自己安装的jdk,查询修改方法与javap相同。
sudo update-alternatives --config java
sudo update-alternatives --config javac
详情可参考我的另外一篇博客:ubuntu配置android开发环境和编译源码遇到的一些问题
PS: 第一次出现这个错误编译不过时,曾经根据同事的提示安装以下包去解决此问题,当时安装这些包后先make clean,再编译终于编译过了。但现在看来原因不是这个,因为这次再安装这些包,虽然有的包已经有更新并安装了,但还是编译不过,即使make clean,重启电脑再编译都无济于事。但还是要谢谢那位同事。
sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
参考:
jdk/java版本与Android源码编译中的错误
附加:
本人错误原因:jdk安装时,javac,java,javap,jar,javadoc 都有修改。所以在切换jdk从openjdk切换到1.6时,都要修改过来
在64位ubuntu上编译katkit4.4时经常遇到以下错误导致编译中止,困扰了很长时间才解决此问题,尝试过几种不同的方法,最后总算找到了根本原因。
先看下错误现象,提示HashSet_jni.h error。
错误现象:
In file included from externalromium_org/content/common/android/hash_set.cc:5:0:
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:10:26: error: extra tokens at end of #ifndef directive [-Werror]
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:11:26: error: missing whitespace after the macro name [-Werror]
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:24:20: error: expected initializer before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:26:17: error: expected initializer before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:29:22: error: expected '{' before '<' token
out/target/product/xxx/obj/GYPd_intermediates/content/jni/HashSet_jni.h:29:22: error: expected unqualified-id before '<' token
externalromium_org/content/common/android/hash_set.cc:30:1: error: expected '}' at end of input
cc1plus: all warnings being treated as errors
make: *** [out/target/product/xxx/obj/STATIC_LIBRARIES/content_content_common_gyp_intermediates/content/common/android/hash_set.o] 错误 1
错误原因:
导致此问题的原因就是在ubuntu每天弹出的更新时选择了默认全部更新,导致原先系统自带的openjdk又安装上了,并且变成了默认的javap。
虽然每次检查java -version都显示是自己配置的java jdk1.6,但没有注意到javap已经改变。后来无意中在网上看到javap,才想起检查自己的默认javap是否正确。
先介绍下javap是什么呢?
javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。
详细介绍请参考:
javap(反汇编命令)详解
那么如何修改javap呢?
使用 sudo update-alternatives --config javap 命令即可以查看修改javap使用的默认版本,可以根据提示选择默认的版本。
如果自己安装的jdk的javap不存在,则可以通过以下方法添加javap
sudo update-alternatives --install /usr/bin/javap javap /home/ameyume/jdk1.6.0_45/bin/javap 300
再次执行 sudo update-alternatives --config javap 设置默认的javap即可。注:如果只有一个可选的话,则不会显示列表,即无需处理。
配置javap的命令用法:
sudo update-alternatives --config javap
[sudo] password for ameyume:
有 2 个候选项可用于替换 javap (提供 /usr/bin/javap)。
选择 路径 优先级 状态
------------------------------------------------------------
0 /usr/lib/jvm/java-6-openjdk-amd64/bin/javap 1061 自动模式
* 1 /home/ameyume/jdk1.6.0_45/bin/javap 300 手动模式
2 /usr/lib/jvm/java-6-openjdk-amd64/bin/javap 1061 手动模式
要维持当前值[*]请按回车键,或者键入选择的编号:
另外,还要确认java和javac是否是使用的自己安装的jdk,查询修改方法与javap相同。
sudo update-alternatives --config java
sudo update-alternatives --config javac
详情可参考我的另外一篇博客:ubuntu配置android开发环境和编译源码遇到的一些问题
PS: 第一次出现这个错误编译不过时,曾经根据同事的提示安装以下包去解决此问题,当时安装这些包后先make clean,再编译终于编译过了。但现在看来原因不是这个,因为这次再安装这些包,虽然有的包已经有更新并安装了,但还是编译不过,即使make clean,重启电脑再编译都无济于事。但还是要谢谢那位同事。
sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
参考:
jdk/java版本与Android源码编译中的错误
附加:
本人错误原因:jdk安装时,javac,java,javap,jar,javadoc 都有修改。所以在切换jdk从openjdk切换到1.6时,都要修改过来
相关文章推荐
- 在64位ubuntu上编译kitkat4.4时遇到HashSet_jni.h错误导致编译中止的问题
- 在64位ubuntu上编译kitkat4.4时遇到HashSet_jni.h错误导致编译中止的问题
- 在64位ubuntu上编译kitkat4.4时遇到HashSet_jni.h错误导致编译中止的问题
- 在64位ubuntu上编译kitkat4.4时遇到HashSet_jni.h错误导致编译中止的问题
- 在64位ubuntu上编译kitkat4.4时遇到HashSet_jni.h错误导致编译中止的问题
- 遇到HashSet_jni.h错误导致编译中止的问题
- 【android NDK及JNI】ubuntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题 .
- ubuntu 系统时间错误导致编译不过的问题
- Ubuntu10.04 LTS 64位编译android4.1.2_r1遇到的错误及解决方法
- 编译TOP-SURF时遇到的问题(ubuntu,64位)
- Ubuntu从9.10升级到14.10(64位)后编译Linux内核遇到的系列问题解决方法
- Ubuntu64位下vlc-android编译及解决遇到的问题
- ubuntu64位编译android2.3源码遇到的各种问题解决方案
- ubuntu 12.04(64位 server)下搭建 android2.3/android4.0开发环境及遇到的编译问题
- Ubuntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
- 64bits Ubuntu下编译Android的步骤,所遇到的问题和解决方法
- ubuntu10.10下编译android 2.3遇到的错误及解决方法
- ubuntu下搭建rtems交叉编译环境所遇到的问题
- VS2008中编译64位程序以及遇到的问题
- 在 Ubuntu 7.04 上安装 VirtualBox 可能会遇到的错误问题的解决!