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

这两天心血来潮,执行完 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” 来搜一下吧,发现搜索结果寥寥无几,看样子问题比较新,其中有一个链接,就顺手点了过去。帖子反映的问题和我一模一样,不过它的分析给了我一些提醒。

从错误信息入手,追踪到/usr/include/gnu/stubs.h,看到如下代码:

#if__WORDSIZE == 32

# include

#elif __WORDSIZE == 64

# include

#else

# error"unexpected value for __WORDSIZE macro"

#endif#if __WORDSIZE == 32

# include

#elif __WORDSIZE == 64

# include

#else

# error "unexpected value for __WORDSIZE macro"

#endif

顺着 WORDSIZE,进入/usr/include/bits/wordsize,发现:

#ifdefined __x86_64__

# define __WORDSIZE    64

# define __WORDSIZE_COMPAT32   1

#else

# define __WORDSIZE    32

#endif#if defined __x86_64__

# define __WORDSIZE64

# define __WORDSIZE_COMPAT321

#else

# define __WORDSIZE32

#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,解决这个问题需要执行以下命令:

[www.linuxidc.com@linuxidc]$ apt-get install libc6-dev-amd64

完成以后再执行 make,发现有错误:

/usr/bin/ld: cannot find -lstdc++

那就继续满足它:

[www.linuxidc.com@linuxidc]$ apt-get install g++-multilib lib64stdc++6

还是不行,又发生下面的错误:

/usr/bin/ld: cannot find -lz

再来执行命令:

[www.linuxidc.com@linuxidc]$ apt-get install lib64z1-dev

x86_64-linux-gnu 在线编译,Linux x86 编译 Android 遭遇 gnu/stubs-64.h相关推荐

  1. openwrt+linux编译,openwrt x86 编译部署

    0.背景 前段时间看到C1037u多网口版本,很是喜欢,替换的4530r,发现玩openwrt x86的人比较少,写一篇日记,以备后用,有错误之处请指出. 1.配置编译环境 Linux 2.获取源代码 ...

  2. linux crontab在线生成,linux下crontab在线配置解析 互联网技术圈 互联网技术圈

    linux下,有时,您可能需要定期执行任务或以预定的时间间隔执行任务.这些任务包括备份数据库,更新系统,执行定期重新引导等.这些任务通常都是使用crontab执行的. 系统crontab文件位于/et ...

  3. linux 网络在线升级,linux在线升级

    //======================================= 前提信息: 1.系统分区信息 SPI-Flash: [0] 0x000000000000-0x00000002000 ...

  4. Linux错误27,解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”...

    centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...

  5. Linux 环境编程 day01 Linux系统介绍、GNU编译工具、静态/共享库、环境变量表

    Linux 环境编程 day01 Linux系统介绍.GNU编译工具.静态/动态库.环境变量表 学习Linux环境编程的原因 UNIX系统介绍 Linux系统介绍 GNU工程 POSIX标准 GNU通 ...

  6. linux系统软件包分类,Linux软件包管理和编译安装

    软件包介绍 开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在GNU/Linux上运行的软件.用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一 ...

  7. openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决

    目录 一.编译环境及准备材料 二.Ubuntu下编译openssl 三.交叉编译 openssl 一.编译环境及准备材料 1.编译环境: 1.1.Ubuntu环境 - ubuntu 14.04.1 $ ...

  8. CentOS下编译Linux内核

    前言 编译内核是一项很简单的事情,但却是进入Linux内核世界的第一步,想要开发内核代码,想要了解内核的运行机制,第一步就是编译Linux内核,以下是在centos7.5环境下编译内核的具体流程. 1 ...

  9. Linux内核开发_1_编译LInux内核

    目录 1. 准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 2. Linux内核配置 2.1 配置选项 1. make config 2. ...

  10. 编译Linux Kernel(linux-4.19.178)并制作成rpm文件

    目录 一.安装依赖项 二.下载.解压缩.制作.config文件 三.编译内核及打包 四.升级内核 首次尝试编译Linux内核,记录过程,提供Linux Kernel(linux-4.19.178)下载 ...

最新文章

  1. [JDK8]性能优化之使用LongAdder替换AtomicLong
  2. python安装numba_python – 在OS X上安装Numba时出错
  3. clickhouse常用sql
  4. 解决IE6下CSS兼容性的两把神器
  5. 关于零基础学习web前端开发,有些过来经验分享
  6. C#仿QQ皮肤—更新DataGridView的鼠标跟随效果
  7. 直播:CSDN 联合腾讯安全上线公开课,分享云原生安全技术理解和应用实践
  8. FineUI.Grid内容换行处理
  9. 最佳实践:阿里云VPC、ECS支持IPv6啦!
  10. error:LNK2005
  11. 信息学竞赛 c语言 pascal,pascal信息学竞赛教程
  12. Java枚举类与常用方法
  13. 解决“npm WARN requires a peer of XXX“问题
  14. tensorflow-serving docker模型部署(以mnist为例)
  15. java得到几天前的日期
  16. python“~”符号的用法
  17. PCFG CKY句法分析
  18. Git 分支篇之远程分支
  19. 万国数据赢得GITC 年度互联网最佳服务奖
  20. Ubuntu 10.10下编译安装无线网卡

热门文章

  1. php 依赖倒置原则,PHP:依赖注入,控制反转,依赖倒置原则
  2. delphi关于try的正确句法结构
  3. 大数据杀熟行为10月1日起明令禁止,作为开发的你怎么看?
  4. Cell-type–specific || 单细胞文章新范式
  5. 数学建模 Lingo 基本算法模板
  6. 机器学习(十)——支持向量机
  7. JPA中@Enumerated注解
  8. 使用定时器时遇到warning: #188-D: enumerated type mixed with another type警告
  9. 92.91p31.space\/index.php 92.91p31.space,93.91p31.space
  10. 函数Str、 Cstr 、 Val 、 Format联系与区别