You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CMake将Tesseract与OpenCV打包进自定义.so库?

实现将Tesseract与OpenCV打包进单个.so库的CMake配置

要把Tesseract、OpenCV和自定义代码打包成单个动态库,核心思路是链接静态版本的Tesseract和OpenCV库,确保所有依赖都被嵌入到最终的.so文件中。以下是具体步骤和配置示例:

1. 准备静态依赖库

首先要确保能获取到Tesseract、OpenCV(及依赖的Leptonica)的静态库文件:

  • 若使用预编译包,需确认包中包含.a格式的静态库;
  • 若自行编译,编译OpenCV时开启BUILD_STATIC_LIBS选项,编译Tesseract/Leptonica时设置BUILD_SHARED_LIBS=OFF,生成静态库。

2. 修改CMakeLists.txt关键配置

基础配置

强制CMake优先查找静态库,并启用位置无关代码(静态库必须开启此选项才能嵌入动态库):

cmake_minimum_required(VERSION 3.10)
project(MyOCRLib)

# 优先查找静态库
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
# 启用位置无关代码(必须)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

查找静态依赖

通过find_package定位OpenCV、Tesseract和Leptonica的静态库:

# 查找OpenCV静态库(按需指定需要的组件)
find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui STATIC)
if(NOT OpenCV_FOUND)
    message(FATAL_ERROR "未找到OpenCV静态库")
endif()

# 查找Tesseract和Leptonica静态库
find_package(Tesseract REQUIRED)
find_package(Leptonica REQUIRED)
if(NOT Tesseract_FOUND OR NOT Leptonica_FOUND)
    message(FATAL_ERROR "未找到Tesseract或Leptonica静态库")
endif()

构建自定义动态库

添加自定义代码源文件,并链接所有静态依赖(注意处理系统级依赖):

# 添加自定义代码源文件
add_library(MyOCRLib SHARED
    src/my_ocr_core.cpp
    src/image_processing.cpp
    # 其他自定义源文件
)

# 链接所有依赖,使用--whole-archive确保静态库符号不被丢弃
target_link_libraries(MyOCRLib
    PRIVATE
        -Wl,--whole-archive
        ${OpenCV_LIBS}
        ${Tesseract_LIBRARIES}
        ${Leptonica_LIBRARIES}
        -Wl,--no-whole-archive
        # 系统级依赖(根据实际情况调整)
        pthread
        m
        dl
)

# 设置库输出路径(可选)
set_target_properties(MyOCRLib PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
)

3. 关键注意事项

  • 链接器选项--whole-archive:默认情况下,链接器会丢弃静态库中未被自定义代码直接引用的符号,导致运行时缺失依赖。此选项强制包含静态库的所有目标文件,避免此类问题;
  • 交叉编译适配:如果是跨架构编译,需在工具链文件中指定Tesseract、OpenCV静态库的交叉编译路径,确保CMake能正确找到对应架构的静态库;
  • 依赖验证:生成库后,使用ldd libMyOCRLib.so命令检查,输出中应仅包含系统级动态库(如libc.so、libpthread.so),无OpenCV或Tesseract的动态库依赖。

内容的提问来源于stack exchange,提问作者Ottunger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:18:26