为啥在构建 Android 11 时出现非法指令(核心转储)错误?

Posted

技术标签:

【中文标题】为啥在构建 Android 11 时出现非法指令(核心转储)错误?【英文标题】:Why do I get Illegal instruction (core dumped) error while building Android 11?为什么在构建 Android 11 时出现非法指令(核心转储)错误? 【发布时间】:2021-08-19 19:17:35 【问题描述】:

有一段时间我正在尝试为 Sony Xperia XZ2 H8266 构建 android 11。 每次构建 org.apache.http.legacy 包的过程都会出错。

[ 99% 263/264] //external/apache-http:org.apache.http.legacy dexpreopt [common]
FAILED: out/soong/.intermediates/external/apache-http/org.apache.http.legacy/and
roid_common/dexpreopt/profile.prof
ANDROID_LOG_TAGS="*:e" out/soong/host/linux-x86/bin/profman --create-profile-fro
m=external/apache-http/art-profile --apk=out/soong/.intermediates/external/apach
e-http/org.apache.http.legacy/android_common/aligned/org.apache.http.legacy.jar 
--dex-location=/system/framework/org.apache.http.legacy.jar --reference-profile-
file=out/soong/.intermediates/external/apache-http/org.apache.http.legacy/androi
d_common/dexpreopt/profile.prof
Illegal instruction (core dumped)
18:31:01 ninja failed with: exit status 1

我正在使用旧的 PowerEdge 2950 和 2 个四核 Xeon CPU,32 Gb RAM,运行 Debian 11 和 Ubuntu 20.04。两个系统都给我相同的输出。 我读过 org.apache.http.legacy 是不推荐使用的包。 我会很感激同样的提示在哪里寻找问题的核心。

提前致谢。 末日骑士

【问题讨论】:

【参考方案1】:

我对这个答案还没有完全的信心,但我刚刚遇到了一个非常相似的问题——在相当古老的 core2duo* 上构建 lineage19/android12 时调用相同风格的 profman

似乎对我有用的是注释掉 art/build/Android.bp 中的 -mfma 和 -mavx2 cflags。导致这种情况的我的网络研究似乎表明这些标志在 cpu 不支持这些指令的构建系统上受到 clang/llvm 的尊重,因为(交叉)编译二进制文件的用例可以在具有 cpu 的系统上使用确实有 avx2 支持。

我猜有一种更合适的方法可以告诉 aosp 构建系统禁用 avx2 从而不使用这些标志,这可能是一个错误,它现在没有正确检测到这种情况。

*(带有 8G 内存,让我补充一下,我刚刚发现使用(便宜的西部数字蓝色)ssd 进行交换似乎需要大约十几个时间来构建交换 :)。 Debian 11 x86_64。

【讨论】:

以上是关于为啥在构建 Android 11 时出现非法指令(核心转储)错误?的主要内容,如果未能解决你的问题,请参考以下文章

在 macbook pro M1 上安装 Tensorflow 时出现“zsh:非法硬件指令 python”[重复]

为啥我在构建项目时出现 Flutter gradle 错误?

为啥在使用 Cordova 构建 APK 时出现此错误?

评估指令时出现 Proguard 错误

为啥我在为 Flutter 使用 codemagic 构建代码时出现“无法为 iOS 构建”?

为啥在尝试将 UIPopover 附加到不同类中的 UIButton 时出现此构建错误?