清理 Linux 多架构环境:彻底卸载 ARM64 并恢复本地编译环境

七月 29, 2026 更新: 八月 04, 2026 [Linux 与系统] #multiarch #cross-compilation #tauri #arm64 #aarch64

清理 Linux 多架构环境

在完成 Tauri 2.0+ 项目的 ARM64 交叉编译后,本地系统会残留大量 arm64 开发库和配置。如果不再需要跨架构编译,建议彻底清理 Multi-arch 环境,避免污染本地 x86_64 编译工具链。

本文先回顾多架构编译环境的搭建过程(清理步骤正是搭建的逆过程),再按以下顺序逐步清理:

  1. 卸载所有目标架构的开发包
  2. 移除系统架构支持
  3. 清理 Rust 目标和链接器配置
  4. 恢复环境变量

回顾:搭建 ARM64 交叉编译环境

先弄清楚环境是怎么搭起来的,清理时才不会漏项。搭建过程共 7 步:

1. 添加 arm64 架构支持

Multi-arch 是 Debian/Ubuntu 的机制,允许一个系统同时安装多个 CPU 架构的软件包:

# 添加 arm64 架构,使 apt 可以安装 :arm64 的包
sudo dpkg --add-architecture arm64

# 刷新软件源索引
sudo apt update

2. 安装交叉编译工具链

# aarch64 交叉编译工具链(gcc、as、ld 等)
sudo apt install gcc-aarch64-linux-gnu

# pkg-config 在交叉编译时也需要,用于解析目标架构的 .pc 文件
sudo apt install pkg-config

3. 安装 Tauri 依赖的 arm64 开发库

Tauri 的 Linux 构建依赖 webkit2gtk、GTK3、librsvg 等开发库,交叉编译时需要安装对应的 :arm64 版本:

sudo apt install libwebkit2gtk-4.1-dev:arm64 libgtk-3-dev:arm64 librsvg2-dev:arm64

如果应用使用了系统托盘(Tauri 的 tray-icon 功能),还需要:

sudo apt install libayatana-appindicator3-dev:arm64

4. 添加 Rust 目标

rustup target add aarch64-unknown-linux-gnu

5. 配置项目链接器

在 Tauri 项目根目录创建 .cargo/config.toml,指定交叉编译时使用的链接器:

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"

6. 设置 pkg-config 环境变量

交叉编译时,pkg-config 默认只搜索 x86_64 的 .pc 文件,需要手动指定 arm64 的搜索路径:

# 仅搜索 arm64 的 pkg-config 文件
export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig

# 允许 pkg-config 在交叉编译场景下工作
export PKG_CONFIG_ALLOW_CROSS=1

注意:设置后 pkg-config 将不再搜索本机 x86_64 路径,会影响本地原生编译。这两个变量是会话级的,关闭终端即失效,编译完成记得 unset(见步骤 4)。

7. 编译验证

cargo build --release --target aarch64-unknown-linux-gnu

编译产物位于 target/aarch64-unknown-linux-gnu/release/,可直接打包发布。


清理步骤

在移除架构前,必须先删掉通过该架构安装的所有软件包。使用 apt purge 配合正则表达式匹配所有带 :arm64 后缀的包:

# 自动卸载并清除 arm64 的开发库及相关依赖
# --allow-remove-essential:arm64 变体的基础包(如 libc6:arm64、libgcc-s1:arm64)标记为 essential,
# 不加该参数 apt 会报错 "关键软件包被移除" 并中止
sudo apt purge -y --allow-remove-essential '.*:arm64'

# 清理可能残留的孤立依赖包
sudo apt autoremove -y

注意:.*:arm64 会匹配所有架构限定为 arm64 的包。如果你同时添加了其他架构(如 armhf),也需要一并清理。

不加 --allow-remove-essential 时,apt 会因 libc6:arm64、libgcc-s1:arm64 等 essential 标记包报错:

E: 关键软件包被移除同时使用了 -y 选项,但是没有搭配 --allow-remove-essential。

这些只是 arm64 架构变体,本机 x86_64 的 libc6:amd64 不受影响,可以放心添加该参数强制移除。

步骤 2:移除系统架构支持

当所有 arm64 的软件包被清空后,即可将该架构从系统的多架构列表中移除:

# 移除 arm64 架构支持
sudo dpkg --remove-architecture arm64

# 更新软件源索引
sudo apt update

如果运行 dpkg --remove-architecture 报错,说明还有带有 :arm64 的软件包未卸载干净。可以使用以下命令查看残留包:

dpkg -l | grep arm64

找到残留的包后,使用 apt purge 手动删除,再重新执行 dpkg --remove-architecture。

步骤 3:清理 Rust 目标和链接器配置

移除 Rust 目标

rustup target remove aarch64-unknown-linux-gnu

清理项目链接器配置

删除或注释掉之前在 Tauri 项目根目录 .cargo/config.toml 中添加的链接器配置:

# 删除或注释以下内容:
# [target.aarch64-unknown-linux-gnu]
# linker = "aarch64-linux-gnu-gcc"

如果 .cargo/config.toml 中没有其他内容,可以直接删除该文件。

步骤 4:恢复环境变量

由于之前通过 export 临时设置的环境变量在关闭终端窗口后会自动失效,如果想在当前终端立即恢复本地原生编译环境,直接运行:

# 恢复默认的 pkg-config 路径
unset PKG_CONFIG_LIBDIR

# 关闭跨架构允许开关
unset PKG_CONFIG_ALLOW_CROSS

验证清理结果

清理完成后,可以通过以下命令验证系统是否已恢复纯净的 x86_64 环境:

# 检查是否还有 arm64 架构
dpkg --print-foreign-architectures
# 预期输出为空(无额外架构)

# 检查 pkg-config 是否只搜索 x86_64
pkg-config --variable=pc_path pkg-config
# 预期路径中不包含 /usr/lib/aarch64-linux-gnu

# 检查 Rust 目标列表
rustup target list --installed
# 预期只包含 x86_64-unknown-linux-gnu

替代方案:Docker 容器隔离编译

如果未来还需要为其他设备打包,但又不想污染本地系统,可以考虑使用 Docker 容器进行沙盒化编译。常见方案:

工具说明
cross-rs基于 Docker 的 Rust 交叉编译工具,自动处理工具链和依赖
docker buildxDocker 原生多架构构建支持
podman无守护进程的容器运行时,支持 rootless 模式

这种方式的优势在于: