2026-07-11 15:47:32 +08:00

93 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 依赖库说明
本包为**自带闭包**交付。`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`(含本库 + librknnrt**22 MB**
依赖关系极简,无需联网、无需 apt。
---
## 四、运行时加载方式
```bash
# 解包后,设一次环境变量
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 的 OpenCV`d`
只要 `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/` 里的库。