android源码make -j16报错

在编译Android源码时遇到分析Android.bp文件失败的问题,导致编译停止。为解决此问题,文章提供了扩展Swap空间的步骤,包括关闭原有swap文件,删除并重新创建新的swapfile,然后赋予权限和启用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码下载完成以后通过如下命令编译:

source build/envsetup.sh 
lunch aosp_x86_64-eng
make -j16 

出现如下编译失败问题:

[100% 1/1] analyzing Android.bp files and generating ninja file at out/soong/bui
FAILED: out/soong/build.ninja
cd "$(dirname "out/host/linux-x86/bin/soong_build")" && BUILDER="$PWD/$(basename
 "out/host/linux-x86/bin/soong_build")" && cd / && env -i  "$BUILDER"     --top 
"$TOP"     --soong_out "out/soong"     --out "out"     -o out/soong/build.ninja 
--globListDir build --globFile out/soong/globs-build.ninja -t -l out/.module_pat
hs/Android.bp.list --available_env out/soong/soong.environment.available --used_
env out/soong/soong.environment.used.build Android.bp
Killed
14:19:43 soong bootstrap failed with: exit status 1
ninja: build stopped: subcommand failed.

#### failed to build some targets (47 seconds) ####

通过如下步骤扩展swap解决:

1. 回到根目录
cd
2. 查看交换区大小
free -m 
3. 关闭原来的swap文件
sudo swapoff /swapfile
4. 删除原来的swpa文件
sudo rm /swapfile
5. 重新创建spap文件
sudo dd if=/dev/zero of=/swapfile bs=1G count=16
6. 赋予权限
sudo chmod 0600 /swapfile
7.创建文件系统
sudo mkswap -f /swapfile
8. 开启swapfile
sudo swapon /swapfile

### 关于 `make -j16 -l16` 参数的理解 `make` 是一种用于管理程序编译过程的工具,通过读取 Makefile 中的规则来决定如何构建目标文件。命令中的 `-j16` 和 `-l16` 参数分别控制并行任务的数量以及系统的负载限制。 #### 参数解释 - **`-jN`**: 表示允许的最大并发作业数为 N。在这个例子中,`-j16` 意味着最多可以同时运行 16 个进程来进行编译工作[^2]。 - **`-lL` (小写字母 L)**: 设置系统负载上限为 L,在此情况下为 16。当系统的平均负载超过这个数值时,即使仍有可用的任务槽位也不会启动新的任务[^3]。 这种配置通常适用于多核处理器环境下的大型项目快速构建需求。 ```bash make -j16 -l16 ``` 上述命令会尝试利用多达 16 个 CPU 核心进行并行处理,并且只有在当前系统负载低于或等于 16 的时候才会增加新任务。 ### 自定义与优化方法 为了更好地适应不同的硬件条件或者特定场景的需求,可以通过以下几种方式进行调整: 1. **动态调整核心数量** 如果希望根据实际机器性能自动设定合理的线程数目而不是固定值,则可采用如下形式: ```bash make -j$(nproc) -l$(nproc) ``` 这里使用 Linux 提供的 `nproc` 命令获取当前主机上逻辑CPU的核心数作为输入参数传递给 `make` ,从而实现更灵活的操作模式[^4]。 2. **监控资源消耗情况** 可以借助一些外部工具比如 GNU Parallel 或者其他专门设计用来跟踪计算密集型应用表现的应用软件来观察整个过程中内存占用率、磁盘I/O速度变化趋势等指标,进而判断是否存在瓶颈问题所在位置以便进一步改进策略[^5]。 3. **修改Makefile内容本身** 对某些复杂工程而言仅仅改变调用层面可能还不够充分满足个性化定制的要求;此时就需要深入研究其内部结构即查看对应的Makefiles文档资料寻找潜在切入点加以改造了——例如重新规划依赖关系图谱减少不必要的重复劳动次数等等措施均有可能带来显著效果提升[^6]。 ### 注意事项 尽管提高并行度能够加速整体进度但也可能导致单个子任务得不到足够的关注而延长完成时间甚至引发错误因此务必谨慎权衡利弊后再做决策[^7]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值