Tesseract-OCR 3.02 with libc++
Xcode 4.6, iOS SDK 6.1, tesseract-ocr 3.02
Since the last OpenCV versions are built using libc++, and tesseract-ocr is built using libstdc++, they can't be used together in one xcode project.
So, I'm trying to build tesseract using libc++. Using the script
Ok, so my problem was that after adding and removing references to libraries a few times in my project, I had quite a mess in my Library Search Paths. Plus, I didn't add the new "include" folder (created when building tesseract) to the User Header Search Paths.
So, just a quick recap, in order to build tesseract-ocr using libc++, so it can work along with newer OpenCV versions:
- Download leptonica-1.69
- Download tesseract 3.02
- Arrange them in the folder structure explained in the original tutorial here
this script to the same folder.
- Edit the script for your relevant IOS_BASE_SDK and IOS_DEPLOY_TGT.
- Edit CXX to use clang++: CXX="/usr/bin/clang++"
- Edit CXXFLAGS to use libc++ as the standard library: CXXFLAGS="$CFLAGS -stdlib=libc++"
- Use the script and build tesseract and leptonica.
- Add these libraries to your xcode project, change the "C++ Standard Library" setting to libc++.
- Make sure your "Library Search Paths" setting is not pointing to any old tesseract libs.
- Make sure your "User Header Search Paths" setting is pointing to the new "include" folder created when you built the new libs.
- Now, when you try building your project, you'll have a few missing header files. Just copy them from the old "include" folder from tesseract and leptonica.
That's it. At this point, you'll have a project capable of using both new OpenCV versions AND tesseract 3.02 together. If it's a new project, don't forget to edit your prefix file accordingly to include OpenCV and Tesseract in case of __cplusplus, and rename any .m file using them to .mm
Big thanks to to this answer, that got me well on my way.