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 here (updating the base sdk and deploy target to 6.1), tesseract is being built just fine, and works in my xcode project once the C++ standard library is set to the compiler default. Than, I tried altering the script to build it with libc++, according to the answer here. I changed CXX to point to clang++, and added -stdlib=libc++ to the CXXFLAGS. The result is that the script succeeds, and the libraries are built, but when choosing libc++ as the C++ standard library in xcode, I'm getting a lot of linker errors and the project build fails. The new libraries still work when the standard library is set to the compiler default (just like when it was built regularly). What am I missing?

Answers


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
  • Download 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.


Need Your Help

Code First Optional One-To-One Relationship

c# asp.net-mvc entity-framework ef-code-first data-annotations

Writing a model for situation where I have two tables which are customers and users. Each user record might have an optional related customer record and vice versa, but none of them is a must. I fi...

How can I use a member function pointer in libcurl

c++ curl function-pointers libcurl member-function-pointers

I am using libcurl I have my downloading of files inside of a class, to which I want to see a progress function. I notice I can set a typical function pointer by

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.