说明
sysroot系统运行的最小集。
sysroot(全称 system root,系统根目录)是交叉编译环境中一个模拟目标平台文件系统结构的目录,它包含了目标设备(如 ARM64 开发板)所需的头文件、库文件、配置文件等开发资源和运行时依赖。简单来说,sysroot 是“目标平台的虚拟根目录”,让交叉编译器能像在目标板上一样查找文件和库。
sysroot 是交叉编译的“桥梁”,它通过模拟目标平台的文件系统,让编译器能正确找到目标板的开发资源,确保编译出的程序能在目标设备上运行。简单说:sysroot = 目标板的“缩小版根目录”,专为交叉编译而生。
生成步骤
有两种方式生成sysroot:
1. 复制目标板的
核心复制目录:
a. 头文件:/usr/include
b. 库文件目录(动态库 + 静态库):
库文件是编译和运行的核心依赖,ARM64 目标板的库通常位于以下路径(根据系统略有差异):
| 目标板系统 | 库文件路径 |
|---|---|
| Debian/Ubuntu | /usr/lib/aarch64-linux-gnu(动态库 .so、静态库 .a)/lib/aarch64-linux-gnu(核心系统库,如 libc.so) |
| Buildroot/Yocto | /usr/lib(直接存放库文件,无架构子目录) /lib(核心库) |
| 通用嵌入式系统 | /usr/lib/arm64(部分系统按架构命名) |
c. 动态链接器及核心运行时文件:
/lib/aarch64-linux-gnu(核心运行时库,如 libpthread.so)
动态链接器:/lib/ld-linux-aarch64.so.1(ARM64 程序的动态加载器,必须包含)。
核心 C 库:/lib/libc.so.6、/usr/lib/libm.so(数学库)等。
d. pkg-config 配置目录:
如果目标板使用 pkg-config管理库依赖,需复制 .pc文件(描述库的路径、编译选项):
路径:/usr/lib/pkgconfig、/usr/share/pkgconfig。
2. 自动生成
Debian/Ubuntu 目标板:
用 debootstrap生成根文件系统:
sudo debootstrap --arch=arm64 bullseye /opt/sysroot/arm64 http://deb.debian.org/debian
buildroot/Yocto 目标板:
工程里面的sysroot目录打包就行。
验证
# 检查头文件
ls /opt/sysroot/arm64/usr/include/stdio.h # 应有此文件# 检查库文件
ls /opt/sysroot/arm64/usr/lib/aarch64-linux-gnu/libm.so # 数学库
ls /opt/sysroot/arm64/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 # 动态链接器# 检查 pkg-config 文件
ls /opt/sysroot/arm64/usr/lib/pkgconfig/xcb.pc # 示例:xcb 库的 .pc 文件