如何解决在 CMAKE 项目中使用 Tesseract
我正在尝试编译一个需要 Tesseract 和 OpenCV 的 cmake 项目。一切都在 Ubuntu 20.04 中完成。
但我一直在努力编译它。
我从源代码编译了 Tesseract,并浏览了几篇 SO 帖子和我在网上找到的任何文章,但仍然没有运气。我注意到 Tesseract 不会在 .cmake
下导出 /usr/local/lib/cmake/
文件,因此您不能执行 find_package(Tesseract x.x.x required)
。
环顾四周,我看到人们建议这样做:
find_package(PkgConfig required)
pkg_search_module(TESSERACT required tesseract)
pkg_search_module(LEPTONICA required lept)
include_directories(${TESSERACT_INCLUDE_Dirs})
include_directories(${LEPTONICA_INCLUDE_Dirs})
link_directories( ${TESSERACT_LIBRARY_Dirs} )
link_directories( ${LEPTONICA_LIBRARY_Dirs} )
似乎发现了什么。执行 pkg_search_module(TESSERACT required tesseract)
后,我可以看到 TESSERACT_INCLUDE_Dirs
填充了以下列表:/usr/local/include;/usr/include/leptonica
。尽管 Tesseract 头文件位于 /usr/local/include/tesseract/
下。无论如何,运行 cmake
没有错误。
然而,之后运行 make
只会增加
error: 'l_int32' does not name a type; did you mean 'u_int32_t'?
54 | l_int32 num; /*!< number of unkNowns */
| ^~~~~~~
到我的项目。即使我什至没有包含任何 Tesseract 或 Leptonica 的头文件。
我也尝试了以下方法但没有成功:
include_directories(/usr/local/include/tesseract/)
include_directories(/usr/local/include/leptonica/)
- 还尝试制作我自己的
.cmake
文件,以便我可以直接使用find_package(Tesseract 4.1.1 required)
。 - 我什至尝试从源代码编译 Leptonica 库,但这无济于事。
- 通读 Tesseract 项目本身的 cmake file 也没有对此有所了解。
解决方法
不幸的是,Ubuntu 的 libtesseract-dev
包没有捆绑其 CMake 配置文件。但这并不意味着您不应该先寻找它们。
find_package(Tesseract 4)
if (NOT Tesseract_FOUND)
find_package(PkgConfig REQUIRED)
pkg_check_modules(Tesseract REQUIRED IMPORTED_TARGET tesseract lept)
add_library(Tesseract::libtesseract ALIAS PkgConfig::Tesseract)
endif ()
# ... later ...
target_link_libraries(my_app PRIVATE Tesseract::libtesseract)
始终使用导入的目标。 从不 永远使用 include_directories
或 link_directories
。完全忘记那些命令的存在。
此代码将尝试在 Tesseract CMake 包中查找 Tesseract::libtesseract
目标。如果不能,它将为 Tesseract 寻找 pkg-config 模块。如果找不到,则构建失败 (REQUIRED
),但如果可以,pkg_check_modules
命令将创建 PkgConfig::tesseract
导入的目标。 add_library(.. ALIAS ..)
命令添加一个别名,使目标名称无论哪种方法成功都匹配。
然后您使用 target_link_libraries
将您的应用程序链接到 Tesseract。 CMake 将为您处理使用要求(即链接和包含目录、编译器标志等)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。