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

使用Conan与CMake配置TesseractOCR时遇链接错误

解决MacOS arm64下Conan 2配置Tesseract的链接问题

问题分析

你遇到的链接未定义符号、构建命令缺少-L/-I/-l参数的问题,核心原因是没有正确使用Conan 2生成的现代CMake导入目标,同时CMake构建流程未关联Conan生成的工具链文件,导致依赖路径和库信息未被正确注入。

修复步骤

1. 更新CMakeLists.txt,使用现代CMake目标

Conan 2的CMakeDeps生成的是符合现代CMake规范的导入目标(如Tesseract::Tesseract),无需手动处理INCLUDE_DIRS和LIBRARIES变量。修改后的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.11)

set(PROJECT_NAME foo)
project(${PROJECT_NAME} CXX)
set(CMAKE_CXX_STANDARD 20)

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -g3 -O0 -W -Wall -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -g0 -O3")

set(SOURCES App/main.cpp)

# 查找Conan生成的Tesseract导入目标
find_package(Tesseract REQUIRED)

message(STATUS "Tesseract_VERSION: ${Tesseract_VERSION}")

add_executable(${PROJECT_NAME} ${SOURCES})
# 链接Tesseract导入目标,自动处理头文件路径、库路径和链接参数
target_link_libraries(${PROJECT_NAME} PRIVATE Tesseract::Tesseract)
# 仅添加项目自身的头文件路径
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/App)

2. 修正Conan构建流程

确保遵循Conan 2的标准编译流程,明确关联工具链文件:

  • 创建并进入构建目录:
    mkdir build && cd build
    
  • 运行Conan安装依赖,生成工具链和依赖配置(指定arm64架构避免MacOS架构混淆):
    conan install .. --build=missing -s arch=armv8
    
    (--build=missing会自动构建无预编译包的依赖)
  • 使用CMake构建,指定Conan生成的工具链文件:
    cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
    cmake --build .
    

3. 额外优化

  • 无需在conanfile.txt中手动声明leptonica,tesseract/5.3.0已内置对leptonica的依赖声明,Conan会自动处理传递依赖,移除后可避免版本冲突:
    [requires]
    tesseract/5.3.0
    
    [generators]
    CMakeDeps
    CMakeToolchain
    
  • 确认终端为原生arm64环境(运行uname -m输出arm64),避免Rosetta 2环境下的架构不兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:01:23