3.7 KiB
Raw Permalink Blame History

依赖库说明

本包为自带闭包交付。lib/ 目录内包含 libstereo_bolt.so 运行所需的全部动态库, 无需在目标板上安装 OpenCV 或任何第三方包


一、包含哪些库lib/ 目录,共 9 个)

说明
libstereo_bolt.so 本算法库(主体)
librknnrt.so RKNN NPU 推理运行时Rockchip 2.3.2
libopencv_core.so.4.5 OpenCV 4.5.0 — 基础矩阵/图像容器
libopencv_imgproc.so.4.5 OpenCV 4.5.0 — 图像处理
libopencv_calib3d.so.4.5 OpenCV 4.5.0 — 立体标定、rectify、三角测量
libopencv_imgcodecs.so.4.5 OpenCV 4.5.0 — 图像文件读写
libopencv_dnn.so.4.5 OpenCV 4.5.0 — DNN 模块
libopencv_features2d.so.4.5 OpenCV 4.5.0 — 特征点calib3d 依赖)
libopencv_flann.so.4.5 OpenCV 4.5.0 — FLANN 索引features2d 依赖)

OpenCV 从源码编译(非 apt 包),SONAME 为标准的 libopencv_*.so.4.5 (不带 Debian/Ubuntu 的 d 后缀),与自行源码编译 OpenCV 4.5.x 的环境兼容。

图像编解码libjpeg/libpng/libtiff/libwebp/openjpeg、protobuf、zlib 均已静态链入 OpenCV不再作为独立 .so 出现。


二、不在包内(由目标板系统提供)

以下是 Linux 系统 ABI 层,必须与目标板 glibc 版本严格对齐,绝不能替换

要求
libc.so.6 glibc ≥ 2.35Ubuntu 22.04 = 2.35,满足)
libpthread.so.0 同上(已并入 glibc 2.34+
libm.so.6 同上
libdl.so.2 同上
libstdc++.so.6 GCC 11+Ubuntu 22.04 自带)
libgcc_s.so.1 同上
ld-linux-aarch64.so.1 动态链接器,系统自带

三、为什么这么设计

问题: 如果目标板通过 apt 安装 OpenCVDebian/Ubuntu 会给 SONAME 加私有后缀 (如 libopencv_core.so.4.5d 而非标准的 …4.5),导致与自行编译的 OpenCV 不兼容; 另外 apt 安装需要联网,新板子部署不可控。

解法: 从 OpenCV 4.5.0 官方源码编译,只构建算法实际需要的 7 个模块 core/imgproc/calib3d/imgcodecs/dnn/features2d/flann图像编解码等第三方库 全部静态链入。最终 lib/ 只有 9 个 .so(含本库 + librknnrt22 MB 依赖关系极简,无需联网、无需 apt。


四、运行时加载方式

# 解包后,设一次环境变量
export LD_LIBRARY_PATH="$(pwd)/lib:$LD_LIBRARY_PATH"

# 验证:应当没有任何 "not found" 输出
ldd lib/libstereo_bolt.so | grep "not found"

五、SONAME 兼容性说明

编译来源 SONAME 与本包兼容?
本包(源码编译 4.5.0 libopencv_core.so.4.5
自行源码编译 4.5.x libopencv_core.so.4.5
Ubuntu apt libopencv-dev libopencv_core.so.4.5d SONAME 不匹配

本包的 libstereo_bolt.so 链接的 NEEDED 是标准 libopencv_*.so.4.5(无 d 与任何从源码编译的 OpenCV 4.5.x 兼容。如果目标板上碰巧装了 apt 的 OpenCVd 只要 LD_LIBRARY_PATH 优先指向 lib/,就会用本包内的库,不会冲突。


六、编译调用程序时注意

生产路径:你自己的代码只用 include/stereo_bolt/c_api.h,不引用任何 OpenCV 头, 相机 buffer 直接传给 sb_process_bolt_module_buffers完全不需要 OpenCV 头文件

编译 example/ 示例(可选,仅用于集成验证):当前示例是纯 C 只读 headerless Mono8 raw 文件并调用 C ABI不引用 OpenCV 头文件。 运行时仍用本包 lib/ 里的库。