导航
  • 主页
  • 音视频
  • Camera
  • UI
  • 协议
  • SDK
  • Android Studio
  • 问答

编译android源码时,gcc将中定义了__x86_64__,编译不过,错误如下。我的PC是32位的,应该如何设置?

stoat 2010-07-04 03:56:28
报错如下:

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


/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里,wordsize如下:
#if defined __x86_64__
# define __WORDSIZE 64
# define __WORDSIZE_COMPAT32 1
#else
# define __WORDSIZE 32
#endif


如果不定义__x86_64__应该就对了,请问如何配置不定义__x86_64__呢?应该是通过gcc的什么命令来配置吧,我用的gcc版本是4.4.332位的PC。
...全文
12304 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xqhrs232 2011-06-30
做个记号,也遇到了这个问题。别人都已经解决!
回复
xqhrs232 2011-06-30
Maven and the “method does not override a method from its superclass” error

http://www.filsa.net/2008/02/11/maven-and-the-method-does-not-override-a-method-from-its-superclass-error/
回复
xqhrs232 2011-06-30
我的解决方法

1>修改/build/core/main.mk中关于BUILD_OS及JAVA VERSION的条件判断检查----最开始我的JDK是JDK1.5.0_21

2>修改下面4个文件----去掉m64的相关项

external/clearsilver/cgi/Android.mk,

external/clearsilver/java-jni/Android.mk,

external/clearsilver/util/Android.mk,

external/clearsilver/cs/Android.mk.


3>plainsocketimpl.java:233:method does not override a method from its superclass



将JDK换成JDK1.6.0_22------记得导出JAVA_HOME改变PATH


4>之所以用JDK1.5是因为JDK1.6编译doc会出问题,我只是听说



回复
chenzq87 2011-03-10
楼主,你好
我的android源码是2.2 froyo
我在external/clearsilver/cgi/Android.mk, external/clearsilver/java-jni/Android.mk, external/clearsilver/util/Android.mk, external/clearsilver/cs/Android.mk.
这四个Android.mk里面找不到下面的代码:
# This forces a 64-bit build for Java6
ifneq ($(filter 1.6%,$(java_version)),)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif

楼主有可以指点一下吗?
回复
luojia20032004 2011-01-19
太感谢大家的分享
回复
stoat 2010-07-09
还是必须如楼上RZHTSNE兄说的,修改clearsilver下的4个android.mk,去掉-m64的编译选项,否则编译clearsilver时还是会碰到问题通不过。

修改后,make clean一下,然后重新make,就编通过了 : )
回复
stoat 2010-07-08
上面的链接错了,还编辑不了... 应该是:
http://topic.csdn.net/u/20100629/00/43768adb-3e4f-40a8-84b6-bbb89f7286cb.html
回复
stoat 2010-07-08
多谢PoemCode、yyy025025025、quguoping1017,安装lib64z1-dev后,编译就正常了,现在还在编译中,我先来回帖了,呵呵~~~

对android的代码审核和管理不太了解,如果任何人都可以上传代码,那代码不就乱了么?

另外对android源码的分支结构不熟,各位能稍微介绍下么?谢了!
分支结构:http://topic.csdn.net/u/20100629/19/c9440c0e-573f-407e-ad8b-6e241e3f77f2.html
其中: “android-...”、“android-cts-...”、“android-sdk-...”、“android-sdk-tools-...”各代表什么?

再次感谢各位~~~~
回复
RZHTSNE 2010-07-08
参见:http://androidforums.com/android-developers/115959-ubuntu-10-04-android-open-source-make-error.html

把external/clearsilver/cgi/Android.mk, external/clearsilver/java-jni/Android.mk, external/clearsilver/util/Android.mk, external/clearsilver/cs/Android.mk.

下面脚本中的ifneq改为ifeq可暂时规避问题
# This forces a 64-bit build for Java6
ifneq ($(filter 1.6%,$(java_version)),)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif

回复
yyy025025025 2010-07-07
尝试将9.10或者更老一点版本的source加入到当前的source list,然后再次安装试试。

基本上的问题就是编译环境没有配置好。
回复
quguoping1017 2010-07-07
sudo apt-get install lib32z1-dev或者lib64z1-dev
回复
PoemCode 2010-07-07
看了楼上yyy025025025兄弟支招,我觉得他可能忽视了你的OS是32位的前提,根据http://source.android.com/source/download.html,给出的指引,你需要

Ubuntu Linux (32-bit x86):
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

Ubuntu Linux (64-bit x86):
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev


言归正传,你的OS是x86,为什么会遇到__x86_64__呢?从源码入可以找到答案,查看platform/external/clearsilver.git 上的一个修改:Fix 64-bit clearsilver shared library issue:http://android.git.kernel.org/?p=platform/external/clearsilver.git;a=commit;h=d36910a8110d8377b22301274d2b5131a732a72b

这次修改当中,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__出现的原因。

要解决gnu/stubs-64.h: No such file or directory,需:
apt-get install libc6-dev-amd64

要解决/usr/bin/ld: cannot find -lstdc++,需:
apt-get install g++-multilib lib64stdc++6

要解决/usr/bin/ld: cannot find -lz,需
apt-get install lib64z1-dev

可参考http://www.poemcode.net/2010/07/android-stubs-64/
回复
stoat 2010-07-06
非常感谢yyy025025025!

-------------------------------------------------------------------------
装了gcc-multilib,然后make,原来的错误没有了,但出现如下错误
/usr/bin/ld: cannot find -lstdc++

再g++-multilib后make,又变为如下错误
/usr/bin/ld: cannot find -lz

--------------------------------------------------------------------------
上面要装的库,有几个用apt-get找不到:
E: Couldn't find package lib32z-dev
E: Couldn't find package lib32readlin5-dev
E: Couldn't find package ia32-libs
E: Couldn't find package libc6-dev-i386
回复
yyy025025025 2010-07-06
特别是libc6-dev-i386 gcc-multilib
回复
yyy025025025 2010-07-06
有配置对正确的安装环境么?
请检查下下面的库吧
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
回复
stoat 2010-07-04
我的是 Ubuntu 10.04,JDK 1.6.0_22
最新拉的代码,说不能用JDK1.5了
回复
luyu_peng 2010-07-04
同问,我的也遇到一样的问题。
补充一下,是用Vmware安装的Ubuntu 10.04,JDK6
回复
发动态
发帖子
Android
创建于2009-10-09

7.8w+

社区成员

移动平台 Android
申请成为版主
社区公告
暂无公告