Files
yolov5-inferrence/docs/cross_compile_wsl_linaro.md
2026-06-05 18:14:00 +08:00

112 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Codex 快速上下文:Windows + WSL + Linaro 交叉编译
这份文档主要给 Codex 在新聊天里快速恢复上下文用。用户希望中文回复,并希望每次回复末尾带一个简短的“上下文快照”。
## 必须记住
- 项目 Windows 路径:`C:\Users\Smos.DESKTOP-6MT98U8\Desktop\yolov5-inference`
- WSL 对应路径:`/mnt/c/Users/Smos.DESKTOP-6MT98U8/Desktop/yolov5-inference`
- 目标平台:aarch64 Linux
- 目标设备运行库较旧,约为 `GLIBC 2.28`
- 不要使用过新的 Ubuntu/Debian 交叉工具链,避免产物依赖 `GLIBC_2.33``GLIBC_2.34``GLIBCXX_3.4.29`
- 当前使用 Linaro GCC 7.4.1
`/home/smos/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu`
- 工具链必须放在 WSL Linux 文件系统中,不要放在 `/mnt/c/...`,否则符号链接可能损坏并触发 `liblto_plugin.so: file too short`
- C++ 标准保持 `C++14`
- RKNN 链接库使用 `rknn_api`,不要改成 `rknnrt`
## 当前 CMake 路线
当前 `CMakeLists.txt` 已直接设置交叉编译器:
```cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(TOOLCHAIN_PATH "/home/smos/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu" CACHE PATH "Linaro GCC 7.4.1 aarch64 toolchain path")
set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PATH}/aarch64-linux-gnu/libc)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
```
因此常规构建时可以直接 `cmake <source>`,不一定需要额外传 `-DCMAKE_TOOLCHAIN_FILE`。仓库里还有 `toolchain-aarch64.cmake`,但当前主路线以 `CMakeLists.txt` 里的 Linaro 配置为准。
## 推荐编译命令
在 Windows PowerShell 中调用 WSL
```powershell
wsl -d Ubuntu bash -lc "rm -rf /home/smos/yolov5-linaro-build && mkdir -p /home/smos/yolov5-linaro-build && cd /home/smos/yolov5-linaro-build && cmake /mnt/c/Users/Smos.DESKTOP-6MT98U8/Desktop/yolov5-inference && make -j16 && file yolov5"
```
产物位置:
```text
/home/smos/yolov5-linaro-build/yolov5
```
## 验证命令
检查工具链版本:
```bash
/home/smos/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc --version
/home/smos/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ --version
```
预期包含:
```text
Linaro GCC 7.4-2019.02
```
检查产物架构:
```bash
file /home/smos/yolov5-linaro-build/yolov5
```
预期包含:
```text
ELF 64-bit LSB executable, ARM aarch64
```
检查是否误依赖高版本 glibc/libstdc++
```bash
/home/smos/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-readelf --version-info /home/smos/yolov5-linaro-build/yolov5 | grep -E 'GLIBC_2\.33|GLIBC_2\.34|GLIBCXX_3\.4\.29'
```
没有输出才是好结果。
检查 RKNN 链接:
```bash
/home/smos/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-readelf -d /home/smos/yolov5-linaro-build/yolov5 | grep rknn
```
预期包含:
```text
librknn_api.so
```
## 常见错误
- `liblto_plugin.so: file too short`:工具链放在 Windows 文件系统导致符号链接损坏。把工具链重新 clone 到 `/home/smos/...`
- `GLIBC_2.33` / `GLIBC_2.34 not found`:用了过新的工具链或 sysroot。改回 Linaro GCC 7.4.1
- `GLIBCXX_3.4.29 not found`:用了过新的 g++ 或 C++ runtime。保持 Linaro GCC 7.4.1、C++14、`rknn_api`
## 每次回复规则
用户希望每次回复末尾附带“上下文快照”,方便开新聊天避免上下文压缩丢信息。
Codex 看不到精确的上下文剩余额度或百分比,所以不要编造数字。可以在快照中写:
```text
上下文额度:无法读取精确数值;当前仅能提供风险状态和关键信息摘要。
```
当对话变长、文件内容很多、输出很大或任务跨多轮时,提醒用户可以开启新聊天,并把上下文快照复制过去。