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

3.9 KiB
Raw Blame History

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.33GLIBC_2.34GLIBCXX_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 已直接设置交叉编译器:

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

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"

产物位置:

/home/smos/yolov5-linaro-build/yolov5

验证命令

检查工具链版本:

/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

预期包含:

Linaro GCC 7.4-2019.02

检查产物架构:

file /home/smos/yolov5-linaro-build/yolov5

预期包含:

ELF 64-bit LSB executable, ARM aarch64

检查是否误依赖高版本 glibc/libstdc++

/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 链接:

/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

预期包含:

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 看不到精确的上下文剩余额度或百分比,所以不要编造数字。可以在快照中写:

上下文额度:无法读取精确数值;当前仅能提供风险状态和关键信息摘要。

当对话变长、文件内容很多、输出很大或任务跨多轮时,提醒用户可以开启新聊天,并把上下文快照复制过去。