AOSP source code build error: Virtual memory exhausted: Cannot allocate memory

Sometimes compiling certain things from source I've received a "virtual memory exhausted: Cannot allocate memory" error. The following is a quick tip to maybe allow gcc/libtool/make/whatever to finish their duty.

[b]Change the user’s limits.[/b]

ulimit -n


and it is current showing as 1024.
Increase limit from 1024 to 4084.
ulimit -n 2048
在编译 AOSP 9 时,遇到 `ninja: build stopped: subcommand failed` 错误通常是由于构建过程中某个子命令执行失败导致的。这种错误本身并不直接说明具体原因,因此需要结合日志和环境配置进行排。 以下是一些常见的导致该错误的原因及解决方法: ### 1. 缺少依赖库 在某些情况下,系统缺少必要的开发库会导致编译失败。例如,缺少 `libssl-dev` 可能引发此类错误。可以通过以下命令安装相关依赖库: ```bash sudo apt-get install libssl-dev ``` 如果服务器无法联网,可以手动下载 `.deb` 包进行安装,确保版本与系统兼容[^1]。 ### 2. Jack 编译器内存不足 AOSP 7.x 及之前版本使用 Jack 编译器,其默认内存限制可能不足以完成大型项目的编译任务。虽然 AOSP 9 已经不再使用 Jack,但如果项目中仍保留了 Jack 的配置文件,可能会引发问题。可以通过修改 `jack-admin` 中的内存参数来增加可用内存: 编辑 `prebuilts/sdk/tools/jack-admin` 文件,找到 `JACK_SERVER_VM_ARGUMENTS` 变量,并添加 `-Xmx8192m` 参数: ```bash JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8192m}" ``` 然后重启 Jack 服务: ```bash ./jack-admin stop-server ./jack-admin start-server ``` 此方法适用于旧版本 AOSP,但在 AOSP 9 中应确保没有残留的 Jack 配置[^2]。 ### 3. 系统资源限制 Ninja 构建过程可能会打开大量文件和进程,如果系统资源限制过低,可能导致构建失败。可以通过修改 `/etc/security/limits.conf` 文件来解除限制: ```bash * soft nofile 10240 * hard nofile 10240 * soft noproc 10240 * hard noproc 10240 ``` 修改后需重新登录或重启系统以使更改生效[^4]。 ### 4. 看详细错误日志 由于编译过程中输出信息较多,错误信息可能被滚动覆盖,建议将编译日志保存到文件中,便于后续找具体错误: ```bash make -j8 | tee build.log ``` 编译失败后,可以使用 `grep` 或文本编辑器搜索 `error` 或 `Errno` 关键词,定位具体出错点: ```bash grep -i error build.log ``` ### 5. 环境配置问题 确保所有编译环境配置正确,包括 Java 版本、Python 版本、SDK 和 NDK 路径等。AOSP 9 推荐使用 Java 8,确保使用正确的版本: ```bash sudo update-alternatives --config java ``` ### 示例:修改 jack-admin 文件增加内存参数 ```bash # 修改 jack-admin 文件 sudo sed -i 's/JACK_SERVER_VM_ARGUMENTS="\(.*\)"/JACK_SERVER_VM_ARGUMENTS="\1 -Xmx8192m"/' prebuilts/sdk/tools/jack-admin # 停止并重启 Jack 服务 ./jack-admin stop-server ./jack-admin start-server ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值