You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译AOSP 6.0.0_r1时遭遇memory corruption错误求助

解决AOSP 6.0.0_r1编译时的malloc内存corruption错误(M1 Mac + Docker Ubuntu14环境)

问题场景

在M1 Mac上通过Docker运行Ubuntu14容器编译AOSP 6.0.0_r1时,反复触发malloc(): memory corruption错误,错误固定发生在dex2oatd进程生成boot.art阶段,多次清理编译缓存、重新执行编译流程均无法解决。

环境信息

  • 宿主机:M1 Mac OS
  • 容器:Ubuntu14(基于官方AOSP构建镜像)
    • 容器内存:16G
    • 交换空间:4G
    • 容器构建命令:
docker build                                                      \
  --tag=aosp-build:ubuntu14.04                             \
  --platform linux/amd64                                   \
  --build-arg userid=1000 --build-arg groupid=1000 --build-arg username=tom \
  --file=aosp.ubuntu14.dockerfile .

核心错误日志

*** Error in `/aosp-6.0.0_r1/out/host/linux-x86/bin/dex2oatd': malloc(): memory corruption: 0x000055555558d520 ***
dex2oatd F  6560  6560 art/runtime/runtime_linux.cc:307] HandleUnexpectedSignal reentered
make: *** [/aosp-6.0.0_r1/out/target/product/generic/dex_bootjars/system/framework/arm/boot.art] Error 1

可行解决方案

1. 调高dex2oat内存限制

AOSP 6.0默认给dex2oat分配的64M内存,在M1的x86_64模拟环境下不足以处理bootjar编译,编译前执行以下命令调整参数:

export ANDROID_JACK_VM_ARGS="-Xmx4g"
export DEX2OAT_FLAGS="--runtime-arg -Xmx2g"

之后重新执行编译命令。

2. 调整Docker资源配置

M1 Mac的x86_64模拟环境对内存交换的兼容性较差,可尝试:

  • 把Docker容器的可用内存调高到20G以上,交换空间调整为8G(在Docker Desktop的Resources > Memory中设置)
  • 临时禁用容器交换空间(需确保内存足够支撑编译)

3. 修改art模块编译参数

针对老版本AOSP在模拟环境的兼容性问题,修改art/build/Android.common_build.mk中的编译优化参数:

DEX2OAT_HOST_DEBUG_FLAGS := -O0 -g
DEX2OAT_TARGET_DEBUG_FLAGS := -O0 -g

修改完成后执行make clean,再重新编译。

4. 更换Ubuntu版本容器

Ubuntu14的glibc版本过旧,与M1的x86_64模拟环境兼容性不足,可尝试使用官方提供的Ubuntu16镜像构建容器,重新执行编译流程。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:51:16