第二章 编译环境搭建:工欲善其事,必先利其器
说实话,搭建编译环境这事儿,看着简单,坑却不少。我刚开始接触鸿蒙编译时,光环境就折腾了两天。后来带团队,发现新人几乎都会在这里卡住。所以这一章,我把自己的经验梳理出来,帮你少走弯路。
核心要点:编译环境搭建是鸿蒙开发的第一步,也是最容易出问题的一步。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。
安装方式有两种:
- 使用鸿蒙官方提供的工具链——推荐,版本匹配有保障
- 自己从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 一遍,麻烦得很。
环境搭好了,下一步就是真正开始编译了。不过别急,先把这章的内容消化掉。我建议你照着步骤走一遍,遇到问题别怕,编译环境的问题大多有规律可循。实在搞不定,翻翻鸿蒙社区的FAQ,或者直接搜报错信息——相信我,你遇到的问题,八成别人都遇到过。