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