编译Android 11出现Illegal instruction (core dumped)错误如何排查
排查与解决思路
核心原因定位
报错日志中明确显示profman工具执行时触发Illegal instruction (core dumped),这是你当前使用的PowerEdge 2950服务器硬件和Android 11编译工具链不兼容导致的:
- PowerEdge 2950搭载的老款Xeon CPU属于酷睿2微架构,最高仅支持SSE3指令集,不包含SSE4.2及更高版本的指令集
- Android 11的预构建主机工具链默认是针对支持SSE4.2的CPU编译的,工具执行时调用到新指令就会触发非法指令崩溃
- 可通过以下命令验证:
# 查看CPU支持的指令集,无sse4_2输出即可确认兼容问题 grep sse4_2 /proc/cpuinfo # 手动执行报错命令,确认崩溃复现 ANDROID_LOG_TAGS="*:e" out/soong/host/linux-x86/bin/profman --create-profile-from=external/apache-http/art-profile --apk=out/soong/.intermediates/external/apache-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/android_common/dexpreopt/profile.prof
可落地的解决方案
临时规避(优先测试验证)
关闭dexpreopt流程跳过profman调用,确认构建流程本身无其他问题:
- 全局关闭dexpreopt:编译命令前添加
WITH_DEXPREOPT=false参数 - 单独关闭对应包的dexpreopt:修改
external/apache-http/Android.bp,在org.apache.http.legacy模块定义中添加如下配置:
dex_preopt: { enabled: false },
长期修复
如果需要保留dexpreopt功能,二选一即可:
- 本地编译适配你当前CPU指令集的
profman二进制,替换预构建的out/soong/host/linux-x86/bin/profman文件,对应源码路径为art/profman/ - 更换搭载支持SSE4.2及以上指令集CPU的主机进行编译,Android 10及以上版本官方编译要求主机CPU必须支持SSE4.2指令集
内容的提问来源于stack exchange,提问作者DoomRider
相关产品推荐
相关产品推荐

