第二章 编译环境搭建:工欲善其事,必先利其器

说实话,搭建编译环境这事儿,看着简单,坑却不少。我刚开始接触鸿蒙编译时,光环境就折腾了两天。后来带团队,发现新人几乎都会在这里卡住。所以这一章,我把自己的经验梳理出来,帮你少走弯路。

核心要点:编译环境搭建是鸿蒙开发的第一步,也是最容易出问题的一步。Ubuntu版本、Python版本、交叉编译工具链版本,三者必须匹配。我建议你严格按照本文的版本号来,别想着「用最新的肯定更好」——我吃过这个亏。

2.1 Ubuntu环境准备

鸿蒙的编译系统,官方推荐的是Ubuntu 20.04 LTS。为什么是20.04?因为它的glibc版本和Python3.8配合得最稳。我试过22.04,结果某些依赖库的兼容性问题让人头疼。

我个人习惯用虚拟机,但如果你有物理机,那更好。虚拟机的话,建议分配至少4核CPU、8GB内存、100GB硬盘。别抠门,编译鸿蒙时资源吃得很凶。

小技巧:安装Ubuntu时,语言选英文。中文环境有时会导致路径编码问题,虽然概率不大,但碰到了很烦人。

2.2 Python与pip工具链

鸿蒙的编译脚本是用Python写的。你需要Python 3.8+,但别超过3.10。为什么?因为有些老旧的依赖库还没适配3.11以上版本。

安装Python很简单:

sudo apt update
sudo apt install python3.8 python3.8-dev python3-pip -y
python3.8 --version  # 确认版本

然后配置pip源。国内的话,我建议用清华源或阿里源,速度差很多:

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

接下来安装编译必需的Python包。这里有个坑——千万别用系统自带的pip安装,容易和系统包冲突。我习惯用虚拟环境:

python3.8 -m venv ohos_env
source ohos_env/bin/activate
pip install setuptools wheel pyyaml requests

注意:每次编译前,记得先激活虚拟环境。我曾经忘了这步,结果编译到一半报错找不到模块,排查了半天才发现是环境没激活。

2.3 交叉编译工具链安装

交叉编译工具链,说白了就是让你在x86的电脑上编译出能在ARM芯片上跑的程序。鸿蒙支持多种芯片架构,最常用的是ARM64和ARM32。

安装方式有两种:

  1. 使用鸿蒙官方提供的工具链——推荐,版本匹配有保障
  2. 自己从Linaro下载——灵活,但版本要自己把控

我一般用官方的方式。下载后解压到 /opt/ohos_toolchain,然后配置环境变量:

export PATH=/opt/ohos_toolchain/bin:$PATH
export CC=aarch64-linux-gnu-gcc
export CXX=aarch64-linux-gnu-g++

验证是否安装成功:

aarch64-linux-gnu-gcc --version

如果输出了版本信息,说明工具链就绪了。

避坑指南:我曾经遇到过工具链版本和内核头文件不匹配的问题。编译出来的内核模块加载时直接报错。后来我养成了习惯——每次下载工具链后,先编译一个简单的hello world程序,在目标板上跑一下,确认没问题再继续。

2.4 依赖库安装

鸿蒙编译需要一堆依赖库。少了哪个,编译到一半就会报错。我整理了一个清单,你照着装就行:

依赖库 用途 安装命令
build-essential 基础编译工具 sudo apt install build-essential
libncurses-dev 菜单配置界面 sudo apt install libncurses-dev
libssl-dev SSL支持 sudo apt install libssl-dev
libffi-dev Python C扩展 sudo apt install libffi-dev
flex bison 词法/语法分析 sudo apt install flex bison
u-boot-tools 镜像打包 sudo apt install u-boot-tools

装完后,我建议你跑一遍依赖检查脚本。鸿蒙源码里有个 build/check_deps.sh,它会自动检测缺少哪些库:

cd ohos_source
bash build/check_deps.sh

如果输出全是绿色勾勾,那环境就稳了。如果有红色叉叉,别慌,看它提示缺什么,补装就行。

我的经验:依赖库安装最怕的是版本冲突。比如libssl-dev,系统可能已经装了1.1版本,但鸿蒙需要1.0。这时候别硬删系统库,用apt install libssl1.0-dev可以共存安装。

2.5 环境验证与常见问题

环境搭好后,我习惯跑一个最小编译来验证。鸿蒙源码里有个 kernel/liteos_a 目录,单独编译它很快:

cd kernel/liteos_a
make clean
make -j4

如果编译成功,说明环境基本没问题。如果报错,常见原因就这几个:

  • Python版本不对——检查 python3 --version 是不是3.8
  • 环境变量没生效——重新 source 一下
  • 磁盘空间不足——编译中间文件很大,至少留20GB
  • 内存不够——编译时 -j 参数调小,比如 -j2

最后提醒:别在root用户下编译。用普通用户,否则编译生成的文件权限会乱掉。我见过有人用root编译后,普通用户无法修改源码,还得 chown 一遍,麻烦得很。

鸿蒙编译环境搭建流程 Ubuntu 20.04 LTS 系统基础环境 Python 3.8 + pip 虚拟环境隔离 交叉编译工具链 ARM64/ARM32 依赖库安装 build-essential等 环境验证 最小编译测试 编译环境就绪 可以开始编译 常见问题与避坑 ⚠ Python版本不匹配 → 使用3.8版本 ⚠ 环境变量未生效 → 重新source激活 ⚠ 磁盘空间不足 → 预留20GB以上 ⚠ 不要用root用户编译 → 使用普通用户

环境搭好了,下一步就是真正开始编译了。不过别急,先把这章的内容消化掉。我建议你照着步骤走一遍,遇到问题别怕,编译环境的问题大多有规律可循。实在搞不定,翻翻鸿蒙社区的FAQ,或者直接搜报错信息——相信我,你遇到的问题,八成别人都遇到过。


专注资料整理