112 lines
3.9 KiB
Markdown
112 lines
3.9 KiB
Markdown
# 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
|
||
上下文额度:无法读取精确数值;当前仅能提供风险状态和关键信息摘要。
|
||
```
|
||
|
||
当对话变长、文件内容很多、输出很大或任务跨多轮时,提醒用户可以开启新聊天,并把上下文快照复制过去。
|