Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Tesseract OCR 3.02和libc++;_Ios_Opencv_Tesseract_Libc++ - Fatal编程技术网

Ios Tesseract OCR 3.02和libc++;

Ios Tesseract OCR 3.02和libc++;,ios,opencv,tesseract,libc++,Ios,Opencv,Tesseract,Libc++,Xcode 4.6、iOS SDK 6.1、tesseract ocr 3.02 由于上一个OpenCV版本是使用libc++构建的,而tesseract ocr是使用libstdc++构建的,因此它们不能在一个xcode项目中一起使用。 所以,我尝试使用libc++构建tesseract。使用脚本(更新基础SDK并部署目标到6.1),TeStAct正好被构建,并且一旦C++标准库被设置为编译器默认值,它就在我的XCODE项目中工作。然后,根据答案,我尝试修改脚本,用libc++构建它。我将C

Xcode 4.6、iOS SDK 6.1、tesseract ocr 3.02

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


我遗漏了什么?

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

因此,简单回顾一下,为了使用libc++构建tesseract 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++”
  • 使用脚本并构建tesseract和leptonica
  • 将这些库添加到xcode项目中,将“C++标准库”设置更改为libc++
  • 确保“库搜索路径”设置未指向任何旧的tesseract库
  • 确保“用户标题搜索路径”设置指向在构建新libs时创建的新“include”文件夹
  • 现在,当您尝试构建项目时,会丢失一些头文件。只需从tesseract和leptonica的旧“include”文件夹中复制即可
就这样。此时,您将拥有一个能够同时使用新OpenCV版本和tesseract 3.02的项目。如果它是一个新项目,不要忘记相应地编辑前缀文件,以包含OpenCV和Tesseract(如果是_cplusplus),并使用它们将任何.m文件重命名为.mm

非常感谢您的回答,这让我走得很好。

已更新以处理此问题(与libc++编译项目(如OpenCV)在同一个项目中工作)。安装时不要忘记以下步骤:

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

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

<> >转到项目设置,并确保C++标准库= >编译器默认值。(感谢)

从项目根目录下的Template Framework项目复制并导入tessdata文件夹。它包含“数据”文件。您可以在此处添加更多数据文件并复制它们


*我必须将C++标准库设置为“LBC+++”,以便OpenCV编译。< /P>第一个链接错误是什么?谢谢回复。“架构armv7s的未定义符号”,以及从整个库中引用的大量“std::…”。我的有效体系结构是为armv7和armv7s设置的,“仅构建活动体系结构”设置为“否”。小更新:IOS_DEPLOY_TGFT与我在xcode项目中使用的不同。更正它仍然会产生相同的错误,但现在是“armv7”,而不是“armv7s”。我似乎不明白这一点。你们能分享一下编译过的库吗?构建它有一个问题。正如你所说,修复了很多错误,除了这个:检查C编译器是否工作。。。没有。知道吗?我实际上没有检查在构建过程中是否所有的测试都通过了。图书馆根本就没在建吗?很好。出于某种原因,它不会复制所有头文件。只需查看它找不到的文件,然后从下载的文件中手动复制它们。这应该足以让您使用创建的库。@bagusflyer如果您不需要Tesseract在同一个项目中与OpenCV一起工作,那么就不需要使用libc++构建它。在这种情况下,您可以定期构建tesseract,或者只需找到一个预编译版本就可以省去麻烦。