[T113] 交叉编译 OpenCV 4.5.2 + face 模块

1. 目标

  • 平台:全志 T113(Tina Linux)
  • OpenCV 版本:4.5.2
  • opencv_contrib:4.5.2
  • 额外模块:face
  • 安装前缀:/opt/opencv4.5.2-t113

2. 目录

bash 复制代码
# 源码目录
~/opencv-4.5.2
~/opencv_contrib-4.5.2

# 构建
~/opencv-4.5.2/build_t113

3. 准备环境变量

bash 复制代码
export OPENCV_SRC=~/opencv-4.5.2
export OPENCV_CONTRIB=~/opencv_contrib-4.5.2
export BUILD_DIR=$OPENCV_SRC/build_t113

# 目标 sysroot(target staging_dir)
export SYSROOT=~/Tina-Linux/out/t113-mq_r/staging_dir/target

mkdir -p $BUILD_DIR

4. toolchain 文件(关键,防宿主机污染)

保存为:~/opencv-4.5.2/build_t113/toolchain_t113.cmake

cmake 复制代码
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# 避免 try_run 触发目标程序运行
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

# 交叉编译器
set(CMAKE_C_COMPILER   "~/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-gcc")
set(CMAKE_CXX_COMPILER "~/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-g++")
set(CMAKE_AR           "~/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-ar")
set(CMAKE_RANLIB       "~/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-ranlib")
set(CMAKE_STRIP        "~/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-strip")

# sysroot
set(CMAKE_SYSROOT "$ENV{SYSROOT}")
set(CMAKE_FIND_ROOT_PATH "${CMAKE_SYSROOT}")

# 编译/链接都带 sysroot
set(CMAKE_C_FLAGS_INIT "--sysroot=${CMAKE_SYSROOT}")
set(CMAKE_CXX_FLAGS_INIT "--sysroot=${CMAKE_SYSROOT}")
set(CMAKE_EXE_LINKER_FLAGS_INIT "--sysroot=${CMAKE_SYSROOT}")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "--sysroot=${CMAKE_SYSROOT}")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "--sysroot=${CMAKE_SYSROOT}")

# 查找策略:程序在宿主机找,库/头/包只在目标根找
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# 禁止从宿主机环境路径捞库
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_USE_PACKAGE_REGISTRY FALSE)
set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY TRUE)
set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY TRUE)

# pkg-config 只看 sysroot
set(ENV{PKG_CONFIG_DIR} "")
set(ENV{PKG_CONFIG_PATH} "")
set(ENV{PKG_CONFIG_SYSROOT_DIR} "${CMAKE_SYSROOT}")
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig:${CMAKE_SYSROOT}/lib/pkgconfig")

5. CMake 配置

bash 复制代码
cd $BUILD_DIR
rm -rf CMakeCache.txt CMakeFiles

cmake .. \
  -G "Unix Makefiles" \
  -DCMAKE_MAKE_PROGRAM=/usr/bin/make \
  -DCMAKE_TOOLCHAIN_FILE=$BUILD_DIR/toolchain_t113.cmake \
  -DCMAKE_INSTALL_PREFIX=/opt/opencv4.5.2-t113 \
  -DOPENCV_EXTRA_MODULES_PATH=$OPENCV_CONTRIB/modules/face

6. 编译与安装

bash 复制代码
cd $BUILD_DIR
make -j$(nproc)
make install

7. 构建结果确认

7.1 库数量确认
bash 复制代码
find /opt/opencv4.5.2-t113/lib -maxdepth 1 -name 'libopencv*.so*' | wc -l

本次结果:48(16 模块 × 3 个 so 链接/版本文件)

7.2 架构确认
bash 复制代码
file /opt/opencv4.5.2-t113/lib/libopencv_core.so.4.5.2
file /opt/opencv4.5.2-t113/lib/libopencv_face.so.4.5.2

应为:ELF 32-bit ... ARM

7.3 宿主机污染检查
bash 复制代码
grep -E "/usr/lib|/usr/local|/lib32|x86_64" $BUILD_DIR/CMakeCache.txt
相关推荐
我是谁??2 小时前
在 Rocky Linux 9 无桌面环境中通过 SSH 安装 KVM 虚拟机(Rocky9含 XFCE 桌面/xubuntu20)完整指南
linux·服务器·ssh
困死,根本不会2 小时前
VMware Ubuntu 显示有线连接却无法上网|完整排查与解决笔记
linux·笔记·ubuntu
Luke Ewin2 小时前
Linux中部署Qwen3.5大模型
linux·运维·服务器·ai·llm·qwen3.5
左左右右左右摇晃2 小时前
数据结构——栈
数据结构·笔记
minji...3 小时前
Linux 进程间通信(三)命名管道
linux·服务器·网络
左左右右左右摇晃3 小时前
数据结构——树
数据结构·笔记
克莱因3583 小时前
linux主机名与Hosts映射 (顺带个DNS简介
linux·运维·服务器
chudonghao4 小时前
[UE学习笔记][基于源码] 理解 Gameplay
c++·笔记·学习·ue5
意疏4 小时前
【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程
linux·docker