为啥在构建 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 错误?