Tesseract-OCR 3.02与libc ++

Xcode 4.6,iOS SDK 6.1,tesseract-ocr 3.02

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

我错过了什么?

好的,所以我的问题是,在我的项目中多次添加和删除对库的引用后,我的库searchpath中出现了相当的混乱。 此外,我没有添加新的“包含”文件夹(build立tesseract时创build)到用户头searchpath。

所以,简单回顾一下,为了使用libc ++构buildtesseract-ocr,所以它可以与更新的OpenCV版本一起工作:

  • 下载leptonica-1.69
  • 下载tesseract 3.02
  • 将它们排列在原始教程中解释的文件夹结构中
  • 将此脚本下载到相同的文件夹。
  • 编辑相关的IOS_BASE_SDK和IOS_DEPLOY_TGT的脚本。
  • 编辑CXX使用clang ++:CXX =“/ usr / bin / clang ++”
  • 编辑CXXFLAGS以使用libc ++作为标准库:CXXFLAGS =“$ CFLAGS -stdlib = libc ++”
  • 使用脚本,build立tesseract和leptonica。
  • 将这些库添加到您的xcode项目中,将“C ++标准库”设置更改为libc ++。
  • 确保你的“库searchpath”设置不是指向任何旧的tesseract库。
  • 确保您的“用户标题searchpath”设置指向新build“lib”文件夹时创build的新“include”文件夹。
  • 现在,当您尝试构build您的项目时,您将会遇到一些缺失的头文件。 只需从tesseract和leptonica旧的“包含”文件夹复制它们即可。

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

非常感谢这个答案,这让我很好的在路上。

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

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

转到您的项目,点击该项目,并在构build设置选项卡中添加-lstdc ++到所有“其他链接器标志”键。

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

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

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