[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
相关推荐
comedate8 小时前
Windows / Linux GPU 虚拟内存布局差异与 CUDA 越界访问行为
linux·windows·mmu·cuda 越界访问
葡萄成熟时 !8 小时前
JAVA 常用API学习笔记
java·笔记·学习
DevOpenClub8 小时前
个人公开市场研究笔记功能需求文档
笔记
暴力求解9 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
ltl10 小时前
序列化格式深度对比:Protobuf、FlatBuffers、Cap’n Proto
linux
lengjingzju10 小时前
编译与调试完全指南—第17章 总结
linux
ltl10 小时前
容器网络性能真相:veth vs macvlan vs eBPF 数据面
linux
我不会插花弄玉11 小时前
9.进程间通信(上)【由浅入深-Linux】
linux·共享内存·进程通信
闻道且行之11 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
CSDN1211012 小时前
麒麟 V10 安装 Node-RED、IEC 104 协议插件及界面汉化
linux·编辑器·vim