在CMAKE项目中使用Tesseract



我正试图编译一个需要Tesseract和OpenCV的cmake项目。一切都在Ubuntu 20.04中完成。但我一直在努力编译它。我从源代码编译了Tesseract,并且已经通过了几个SO帖子和我在网上找到的任何文章,但仍然没有运气。我注意到Tesseract不导出/usr/local/lib/cmake/下的.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的头文件。

这篇文章似乎是唯一一个接近解决方案的。

我还尝试了以下操作,但没有成功:

  • 直接使用
  • 添加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文件也没有阐明这一点。

所以很遗憾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_directorieslink_directories。忘记那些命令的存在。

这段代码将尝试在Tesseract CMake包中找到Tesseract::libtesseract目标。如果不能,它将为Tesseract查找pkg-config模块。如果找不到,则构建失败(REQUIRED),但如果可以,则pkg_check_modules命令将创建导入的PkgConfig::tesseract目标。add_library(.. ALIAS ..)命令添加一个别名,使目标名称匹配,无论哪种方法成功。

然后使用target_link_libraries将应用程序链接到Tesseract。CMake将处理使用需求(例如:链接和包含目录,编译器标志等)。

相关内容

  • 没有找到相关文章

最新更新