带有libc ++的Tesseract-OCR 3.02

时间:2013-05-01 17:37:07

标签: ios opencv tesseract libc++

Xcode 4.6,iOS SDK 6.1,tesseract-ocr 3.02

由于最后一个OpenCV版本是使用 libc ++ 构建的,而tesseract-ocr是使用 libstdc ++ 构建的,因此它们不能在一个xcode项目中一起使用。
所以,我正在尝试使用libc ++构建tesseract。使用脚本here(更新基本sdk并将目标部署到6.1),tesseract正在构建得很好,并且一旦C ++标准库设置为编译器默认值,就可以在我的xcode项目中工作。根据答案here,我尝试用libc ++改变脚本来构建它。我将 CXX 更改为指向 clang ++ ,并将 -stdlib = libc ++ 添加到 CXXFLAGS
结果是脚本成功,并且构建了库,但是当在xcode中选择libc ++作为C ++标准库时,我遇到了很多链接器错误,项目构建失败了。当标准库设置为编译器默认值时,新库仍然有效(就像定期生成时一样)
我错过了什么?

2 个答案:

答案 0 :(得分:3)

好的,所以我的问题是在我的项目中添加和删除对库的引用几次后,我的库搜索路径出现了很多问题。另外,我没有将新的“include”文件夹(在构建tesseract时创建)添加到用户标题搜索路径。

所以,快速回顾一下,为了使用libc ++构建tesseract-ocr,它可以与更新的OpenCV版本一起使用:

  • 下载leptonica-1.69
  • 下载tesseract 3.02
  • 将它们安排在原始教程here
  • 中说明的文件夹结构中
  • this脚本下载到同一文件夹。
  • 编辑相关IOS_BASE_SDK和IOS_DEPLOY_TGT的脚本。
  • 编辑CXX以使用clang ++:CXX =“/ usr / bin / clang ++”
  • 编辑CXXFLAGS以使用libc ++作为标准库:CXXFLAGS =“$ CFLAGS -stdlib = libc ++”
  • 使用脚本并构建tesseract和leptonica。
  • 将这些库添加到xcode项目中,将“C ++标准库”设置更改为libc ++。
  • 确保您的“图书馆搜索路径”设置不指向任何旧的tesseract库。
  • 确保“用户页眉搜索路径”设置指向构建新库时创建的新“包含”文件夹。
  • 现在,当您尝试构建项目时,您将缺少一些头文件。只需从tesseract和leptonica的旧“include”文件夹中复制它们。

就是这样。此时,您将拥有一个能够同时使用新OpenCV版本和tesseract 3.02的项目。如果是新项目,请不要忘记编辑前缀文件,以便在__cplusplus的情况下包含OpenCV和Tesseract,并使用它们重命名任何.m文件.mm

非常感谢this回答,这让我很顺利。

答案 1 :(得分:2)

Tsseract-OCR-iOS已更新以处理此问题(在与libc ++编译的项目(例如OpenCV)相同的项目中工作)。安装时不要忘记这些步骤:

  

如果您使用的是iOS7或更高版本,请链接libstdc ++。6.0.9.dylib库(您的目标=> General =>链接的框架和库=> + => libstdc ++。6.0.9)

     

转到您的项目,单击项目,然后在Build Settings选项卡中将-lstdc ++添加到所有“Other Linker Flags”键。

     

*转到项目设置,并确保C ++标准库=>编译器默认。 (感谢https://github.com/trein

     

从项目根目录下的Template Framework Project复制并导入tessdata文件夹。它包含“tessdata”文件。你可以在这里添加更多的tessdata文件。

*我必须将C ++标准库设置为“libc ++”才能编译OpenCV。