Tôi không phải là một chuyên gia với C++ nhưng tôi có cùng một vấn đề và do một số thử nghiệm và lỗi và rất nhiều tìm kiếm trên internet tôi nghĩ rằng tôi đã giải quyết được.
Như tôi đã hiểu, vấn đề là opencv và tesseract được xây dựng với các thư viện chuẩn khác nhau. Các opencv mới nhất được xây dựng với libC++ trong khi tesseract được xây dựng với stdlibC++
Giải pháp là xây dựng lại một trong số chúng để cả hai đều sử dụng cùng một thư viện chuẩn. Tôi quyết định biên dịch lại tesseract và làm theo các hướng dẫn được tìm thấy here tham chiếu đến build script được sử dụng để xây dựng thư viện.
Tôi sửa đổi tập lệnh này (một lần nữa, bằng cách dùng thử một lỗi, không thực sự chắc chắn đây là cách tốt nhất) để sử dụng trình biên dịch clang ++ (CXX="/usr/bin/clang++"
) và sử dụng libC++ (CXXFLAGS="$CFLAGS -stdlib=libc++"
) và nó biên dịch (albiet với một số cảnh báo). Bạn cũng có thể cần sao chép một số tiêu đề vì tập lệnh dường như không sao chép tất cả.
Sau đó, chỉ sử dụng thư viện này thay vì thư viện đã tải xuống trong dự án iOS của bạn (nhớ thay đổi trở lại libC++ trong cài đặt xây dựng) và mọi thứ sẽ biên dịch và liên kết tốt.
Cho đến nay dường như hoạt động chính xác trong thời gian chạy.
để được thêm accourare, OpenCV yêu cầu dự án iOS của tôi để được biên dịch với: libC++, trong khi Tesseract yêu cầu "Trình biên dịch mặc định". – Shvalb