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

article/2025/9/24 14:28:13

编译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-dev0b1331709591d260c1c78e86d0c51c18.png


http://chatgpt.dhexx.cn/article/T29u2Ne7.shtml

相关文章

契约测试 No stubs or contracts were found for [XXX]问题解决

1、问题 最近在学习契约测试&#xff0c;用到的是spring-cloud-contract&#xff0c;网上有很多教程&#xff0c;便试着照葫芦画瓢的方式&#xff0c;来实现一遍。由提供者建立契约、生成存根&#xff0c;然后把存根交给消费方测试时&#xff0c;抛出了一个异常No stubs or co…

mockito_Mockito – JAXB的RETURNS_DEEP_STUBS

mockito 很抱歉没有写一段时间&#xff0c;但是我正忙于为DZone编写JBoss Drools Refcard&#xff0c;而且我正在写一本有关Mockito的书&#xff0c;因此我没有太多时间来写博客了…… 无论如何&#xff0c;最近在我当前的项目中&#xff0c;我对使用Mockito和JAXB结构进行单元…

gnu/stubs-32.h

64位系统下编译32位程序 g -m32 出现/usr/include/gnu/stubs.h:7:27: 致命错误&#xff1a;gnu/stubs-32.h&#xff1a;没有那个文件或目录&#xff0c; 解决&#xff1a;root用户下安装32位的glibc库文件 安装32位glibc库文件命令&#xff1a; yum install glibc-devel.i…

Mockito – JAXB的RETURNS_DEEP_STUBS

很抱歉没有写一段时间,但是我正忙于为DZone编写JBoss Drools Refcard,而且我正在写一本有关Mockito的书,因此我没有太多时间来写博客了…… 无论如何,最近在我当前的项目中,我对使用Mockito和JAXB结构进行单元测试有一个有趣的情况。 我们已经从为我们提供的模式生成的嵌…

Ubuntu linux解决stubs-32.h缺失

在ubuntu linux编译qnx平台时提示&#xff1a; fatal error: gnu/stubs-32.h: No such file or directory 查了一圈后 输入 sudo apt-get install libc6-dev-i386 此后stubs-32.h会出现在 /usr/include/x86_64-linux-gnu/gnu/ 将gnu文件夹移动到对应的qnx平台环境目录下即可…

第一章 使用SOAPUI测试和开发Web Services Stubs

Stub(桩件)的作用是&#xff1a;如果一个接口有很多方法&#xff0c;如果要实现这个接口&#xff0c;就要实现所有的方法。但是一个类从业务来说&#xff0c;可能只需要其中一两个方法。如果直接去实现这个接口&#xff0c;除了实现所需的方法&#xff0c;还要实现其他所有的无…

单元测试探析:什么是Stubs、Mocks、Spies、Dummies?带你了解4个核心工具

在单元测试中&#xff0c;对象之间的依赖往往交织到一起&#xff0c;需要拆成各个单元才能逐个击破&#xff0c;这也是单元测试的目的。如何将这些交织到一起的对象拆开&#xff0c;需要一些工具&#xff0c;这些工具业内人们称其为“测试替身”。 本文作者介绍了单元测试中的…

分布式CAP 定理

历史 这个定理起源于柏克莱加州大学University of California, Berkeley的计算机科学家埃里克布鲁尔在2000年的分布式计算原则研讨会&#xff08;Symposium on Principles of Distributed Computing&#xff08;PODC&#xff09;&#xff09;上提出的一个猜想。 在2002年&…

简单解释CAP定理

简单解释下分布式系统中的CAP定理: CAP定理: P-分区容错性, C-一致性, A-可用性 (易 ---> 难) CAP如何选择 > 在不同的业务领域中对CAP的选择有所不同; (典型的情况以及选取的规则) CAP的重要性 > CAP是分布式系统设计中最基础也最为关键的理论! (分布式系统不可能同…

CAP定理以及BASE定理详解

CAP 是分布式系统设计理论&#xff0c;BASE 是 CAP 理论中 AP 方案的延伸。 CAP定理 C&#xff1a;Consistency&#xff08;一致性&#xff09;、A: Availability&#xff08;可用性&#xff09;、P: Partition Tolerance&#xff08;分区容错性&#xff09; 一致性&#xf…

架构设计之「 CAP 定理 」

在计算机领域&#xff0c;如果是初入行就算了&#xff0c;如果是多年的老码农还不懂 CAP 定理&#xff0c;那就真的说不过去了。CAP可是每一名技术架构师都必须掌握的基础原则啊。 现在只要是稍微大一点的互联网项目都是采用 分布式 结构了&#xff0c;一个系统可能有多个节点组…

图解 CAP 定理(转载)

文章目录 CAP 定理不一致的产生解决方案保 CP 失 A保 AP 失 C CAP 定理 Consistency 一致性&#xff1a;访问分布式系统中任意节点&#xff0c;总能返回一致的结果 Every read receives the most recent write or an errorAvailability 可用性&#xff1a;分布式系统总能向客户…

分布式系统的CAP定理

目前只要是大型互联网项目都是采用分布式结构&#xff0c;一个系统可能有多个节点组成&#xff0c;每个节点都可能需要维护一份数据。那么如何维护各个节点之间的状态&#xff0c;如何保障各个节点之间数据的同步问题就是大家急需关注的事情了。CAP定理是分布式系统中最基础的原…

CAP 定理的含义

看到一篇很好的关于 CAP 定理的博文&#xff0c;顺便转发一下&#xff0c;by&#xff1a;阮一峰 分布式系统&#xff08;distributed system&#xff09;正变得越来越重要&#xff0c;大型网站几乎都是分布式的。 分布式系统的最大难点&#xff0c;就是各个节点的状态如何同步。…

CAP定理和BASE理论

2000 年的时候&#xff0c;Eric Brewer 教授提出了 CAP 猜想&#xff0c;2年后&#xff0c;被 Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性&#xff0c;从此&#xff0c;CAP 理论正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。 …

分布式-CAP定理

在分布式学习中&#xff0c;我们经常遇到一个概念便是CAP&#xff0c;它是分布式很重要的理论基础。很多分布式算法也是在不断的在解决相关问题&#xff0c;今天就让我们重新学习或者回顾一下这个知识点吧&#xff0c;加深印象打牢基础。 一、简介 CAP定理&#xff08;CAP theo…

佳文分享:CAP定理

1976年6月4号&#xff0c;周5&#xff0c;在远离音乐会大厅的一个楼上的房间内&#xff0c;在位于Manchester的Lesser Free Trade Hall &#xff0c;Sex Pistols 乐队&#xff08;注&#xff1a;Sex Pistols的经理人Malcolm McLaren 2010.4.8去世&#xff09;开始了他们的第一次…

谈谈对CAP定理的理解

谈谈对CAP定理的理解 CAP定理的常规解释是任何分布式系统只能在一致性(Consitency)&#xff0c;可用性(Availability)和分区容忍性(Partition Tolerance)中三选二。这个解释很让人费解&#xff0c;笔者在看了一些文章后谈谈我对它的理解&#xff0c;还请斧正。 从问题出发 假设…

分布式系统的 CAP 定理

CAP定理指出&#xff0c;在一个分布式系统中&#xff0c;对于一致性、可用性、分区容错这三个特性&#xff0c;不可能同时满足&#xff0c;而是必须有所舍弃。我们设计分布式系统时&#xff0c;必须在三者之间&#xff08;尤其是一致性和可用性之间&#xff09;有所取舍和平衡。…

简述CAP定理

CAP定理示意图&#xff1a; 一.CAP理论概述: CAP定理告诉我们&#xff0c;一个分布式系统不可能同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition tolerance&#xff09;这三个基本需求&…