Xcode 4.6、iOS SDK 6.1、tesseract-ocr 3.02
由于最新的 OpenCV 版本是使用构建的libc++,并且 tesseract-ocr 是使用构建的libstdc++ 库,它们不能在一个 xcode 项目中一起使用。
所以,我正在尝试使用 libc++ 构建 tesseract。使用脚本here https://dl.dropboxusercontent.com/u/1745859/Blog/tesseract/ios60_tesseract302_leptonica_169/build_dependencies.sh(更新基础 sdk 并将目标部署到 6.1),tesseract 构建得很好,一旦 C++ 标准库设置为编译器默认值,它就可以在我的 xcode 项目中工作。然后,根据答案,我尝试更改脚本以使用 libc++ 构建它here https://stackoverflow.com/a/15864395/569546。我变了CXX指向clang++,并添加了-stdlib=libc++ to the CXXFLAGS.
结果是脚本成功,并且构建了库,但是当在 xcode 中选择 libc++ 作为 C++ 标准库时,我收到很多链接器错误并且项目构建失败。当标准库设置为编译器默认值时,新库仍然可以工作(就像定期构建时一样)。
我缺少什么?
好的,所以我的问题是,在我的项目中多次添加和删除对库的引用后,我的库搜索路径非常混乱。另外,我没有将新的“include”文件夹(在构建超立方体时创建)添加到用户标题搜索路径中。
因此,快速回顾一下,为了使用 libc++ 构建 tesseract-ocr,以便它可以与较新的 OpenCV 版本一起工作:
- 下载leptonica-1.69
- 下载超正方体 3.02
- 将它们排列在原始教程中解释的文件夹结构中here http://tinsuke.wordpress.com/2011/11/01/how-to-compile-and-use-tesseract-3-01-on-ios-sdk-5
- 下载this https://dl.dropboxusercontent.com/u/1745859/Blog/tesseract/ios60_tesseract302_leptonica_169/build_dependencies.sh脚本到同一文件夹。
- 编辑相关 IOS_BASE_SDK 和 IOS_DEPLOY_TGT 的脚本。
- 编辑 CXX 以使用 clang++:CXX="/usr/bin/clang++"
- 编辑 CXXFLAGS 以使用 libc++ 作为标准库:CXXFLAGS="$CFLAGS -stdlib=libc++"
- 使用脚本并构建 tesseract 和 leptonica。
- 将这些库添加到您的 xcode 项目中,将“C++ 标准库”设置更改为 libc++。
- 确保您的“库搜索路径”设置未指向任何旧的超立方体库。
- 确保您的“用户标头搜索路径”设置指向构建新库时创建的新“include”文件夹。
- 现在,当您尝试构建项目时,您将缺少一些头文件。只需从 tesseract 和 leptonica 的旧“include”文件夹中复制它们即可。
就是这样。此时,您将拥有一个能够同时使用新 OpenCV 版本和 tesseract 3.02 的项目。如果是新项目,请不要忘记相应地编辑前缀文件以包含 OpenCV 和 Tesseract(如果是 __cplusplus),并将使用它们的任何 .m 文件重命名为 .mm
非常感谢this https://stackoverflow.com/a/15864395/569546答案,这让我一路顺利。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)