2013-05-01 101 views
3

的Xcode 4.6,iOS版SDK 6.1,正方体-OCR 3.02

自上OpenCV的版本使用的libC++建成,正方体-OCR使用的libstdC++建成,他们能够”在一个xcode项目中一起使用。
所以,我试图用libC++构建tesseract。使用脚本here(将基本sdk和部署目标更新到6.1),tesseract正在构建得很好,一旦将C++标准库设置为编译器默认值,就可以在我的xcode项目中运行。根据回答here,我尝试改变脚本以使用libC++构建它。我改变CXX指向铛++,并加入-stdlib = libc的++CXXFLAGS
结果是脚本成功,图书馆都建,但选择的libC++作为在Xcode C++标准库时,我得到了很多的链接错误和项目生成失败。当标准库设置为编译器默认值时(如同定期创建时),新库仍然可以工作。

我错过了什么?的Tesseract-OCR 3.02用的libC++

+0

什么是第一个链接错误? – 2013-05-02 15:11:13

+0

感谢您的回复。 “架构armv7s的未定义符号”以及大量来自整个库的“std :: ....”。我的有效体系结构是为armv7和armv7s设置的,“Build Active Architecture Only”设置为“No”。 – 2013-05-03 20:03:16

+0

小小更新:IOS_DEPLOY_TGFT与我在xcode项目中使用的不同。纠正它仍然会产生相同的错误,但现在它是“armv7”而不是“armv7s”。我似乎无法弄清楚这一点。 – 2013-05-05 11:00:38

回答

3

好了,我的问题是,在我的项目中添加和删除引用到图书馆了几次后,我在我的库搜索路径相当混乱。此外,我没有将新的“包含”文件夹(在构建tesseract时创建)添加到用户标题搜索路径。

所以,只是一个快速回顾一下,为了使用的libC++,建立正方体,OCR,因此它可以随着新的OpenCV的版本工作:

  • 下载leptonica-1.69
  • 下载正方体3.02
  • 排列它们在文件夹结构在原来的教程解释here
  • 下载this脚本到同一文件夹。
  • 编辑相关IOS_BASE_SDK和IOS_DEPLOY_TGT的脚本。
  • 编辑CXX使用铛++:CXX = “在/ usr/bin中/铛++”
  • 编辑CXXFLAGS使用的libC++的标准库:CXXFLAGS = “$ CFLAGS -stdlib =的libC++”
  • 使用脚本和构建tesseract和leptonica。
  • 添加这些库与您xcode项目,改变“C++标准库”设置为在libC++。
  • 确保您的“库搜索路径”设置不指向任何旧的正方体库。
  • 确保您的“用户头搜索路径”设置指向新的“包括”文件夹中创建,当你建立了新库。
  • 现在,当您尝试构建项目时,您将会遇到一些缺失的头文件。只需将它们从tesseract和leptonica旧的“包含”文件夹复制即可。

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

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

+0

你可以请共享编译的库吗?有一个问题来建立它。 – Shmidt 2013-05-11 19:32:14

+1

正如你所说的那样,修复了许多错误,除了这一个:*检查C编译器是否工作...没有*。任何想法? – Shmidt 2013-05-12 07:04:01

+0

我其实并没有检查构建过程中是否通过了所有的测试。这些图书馆根本没有建成吗? – 2013-05-16 09:31:37

2

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

如果您正在使用iOS7或以上,链接的libstdC++ 6.0.9.dylib库(你的目标=>常规=>链接的框架和库=> + => libstdC++。6.0.9)

转到您的项目,单击该项目并在Build Settings选项卡中将-lstdC++添加到所有“Other Linker标志”键。 *转到您的项目设置,并确保C++标准库=>编译器默认值。 (感谢https://github.com/trein

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

*为了让OpenCV编译,我必须将C++标准库设置为“libC++”。