iOS应用程序中Tesseract集成中的错误

在我的iOS应用程序中集成Tesseract SDK时出现一些错误。 我遵循的程序 –

1)在xcode中拖动“libtesseract_full.a”2)在xcode中拖动“tessdata”文件夹3)在xcode中拖动“baseapi.h”

现在,当我使用Tesseract –

// init the tesseract engine. tess = new TessBaseAPI(); tess->SimpleInit([dataPath cStringUsingEncoding:NSUTF8StringEncoding], // Path to tessdata-no ending /. "eng", // ISO 639-3 string or NULL. false); 

我得到这些下面的错误(我认为有一些框架或类似的东西缺less,但没有得到什么是缺less的,tesseract演示项目工作正常我的系统)

 clang: warning: argument unused during compilation: '-stdc++' ld: warning: CPU_SUBTYPE_ARM_ALL subtype is deprecated: /Users/saurabhsharma/Desktop/Tess/SnapXv2/libtesseract_full.a(libtesseract_full.o) Undefined symbols for architecture armv7: "std::basic_ostream<char, std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from: SVNetwork::SVNetwork(char const*, int) in libtesseract_full.a(libtesseract_full.o) "std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from: std::_Rb_tree_iterator<std::pair<char const* const, int> >::operator--() in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<int const, VariableContent*> >::operator--() in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > >::operator--() in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<int const, ScrollView*> >::operator--() in libtesseract_full.a(libtesseract_full.o) "std::string::operator+=(char const*)", referenced from: ScrollView::SendPolygon() in libtesseract_full.a(libtesseract_full.o) "std::ios_base::Init::Init()", referenced from: __static_initialization_and_destruction_0(int, int) in libtesseract_full.a(libtesseract_full.o) __static_initialization_and_destruction_0(int, int) in libtesseract_full.a(libtesseract_full.o) "std::string::size() const", referenced from: SVNetwork::Flush() in libtesseract_full.a(libtesseract_full.o) "std::__throw_length_error(char const*)", referenced from: std::vector<int, std::allocator<int> >::_M_insert_aux(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&) in libtesseract_full.a(libtesseract_full.o) "std::string::erase(unsigned long, unsigned long)", referenced from: SVNetwork::Flush() in libtesseract_full.a(libtesseract_full.o) "std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from: std::_Rb_tree<int, std::pair<int const, ScrollView*>, std::_Select1st<std::pair<int const, ScrollView*> >, std::less<int>, std::allocator<std::pair<int const, ScrollView*> > >::erase(std::_Rb_tree_iterator<std::pair<int const, ScrollView*> >) in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree<std::pair<ScrollView*, SVEventType>, std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> >, std::_Select1st<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > >, std::less<std::pair<ScrollView*, SVEventType> >, std::allocator<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > > >::erase(std::_Rb_tree_iterator<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > >) in libtesseract_full.a(libtesseract_full.o) "std::string::length() const", referenced from: SVNetwork::Flush() in libtesseract_full.a(libtesseract_full.o) "std::string::operator+=(char)", referenced from: ScrollView::SendPolygon() in libtesseract_full.a(libtesseract_full.o) "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from: ScrollView::SendPolygon() in libtesseract_full.a(libtesseract_full.o) SVNetwork::SVNetwork(char const*, int) in libtesseract_full.a(libtesseract_full.o) "std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from: std::_Rb_tree_iterator<std::pair<int const, VariableContent*> >::operator++() in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<char const* const, int> >::operator++() in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<int const, ScrollView*> >::operator++() in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > >::operator++() in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<int const, ScrollView*> >::operator++(int) in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree_iterator<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > >::operator++(int) in libtesseract_full.a(libtesseract_full.o) "std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from: std::_Rb_tree<int, std::pair<int const, VariableContent*>, std::_Select1st<std::pair<int const, VariableContent*> >, std::less<int>, std::allocator<std::pair<int const, VariableContent*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<int const, VariableContent*> const&) in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree<char const*, std::pair<char const* const, int>, std::_Select1st<std::pair<char const* const, int> >, std::less<char const*>, std::allocator<std::pair<char const* const, int> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<char const* const, int> const&) in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree<int, std::pair<int const, ScrollView*>, std::_Select1st<std::pair<int const, ScrollView*> >, std::less<int>, std::allocator<std::pair<int const, ScrollView*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<int const, ScrollView*> const&) in libtesseract_full.a(libtesseract_full.o) std::_Rb_tree<std::pair<ScrollView*, SVEventType>, std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> >, std::_Select1st<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > >, std::less<std::pair<ScrollView*, SVEventType> >, std::allocator<std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::pair<ScrollView*, SVEventType> const, std::pair<SVSemaphore*, SVEvent*> > const&) in libtesseract_full.a(libtesseract_full.o) "std::ios_base::Init::~Init()", referenced from: ___tcf_0 in libtesseract_full.a(libtesseract_full.o) ___tcf_0 in libtesseract_full.a(libtesseract_full.o) "std::string::c_str() const", referenced from: ScrollView::SendPolygon() in libtesseract_full.a(libtesseract_full.o) SVNetwork::Flush() in libtesseract_full.a(libtesseract_full.o) "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()", referenced from: ScrollView::SendPolygon() in libtesseract_full.a(libtesseract_full.o) SVNetwork::SVNetwork(char const*, int) in libtesseract_full.a(libtesseract_full.o) "std::string::append(char const*)", referenced from: SVNetwork::Send(char const*) in libtesseract_full.a(libtesseract_full.o) "std::cout", referenced from: SVNetwork::SVNetwork(char const*, int) in libtesseract_full.a(libtesseract_full.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation) 

任何帮助,将不胜感激。

只是在构build设置“C ++标准库”改为“libstdc ++(GNU C ++标准库)”,错误消失了…感谢@ H2CO3提示。

有几个问题:

首先确保包含代码的文件:

 tess = new TessBaseAPI(); tess->SimpleInit(...); 

具有.mm (Objective-C ++)的文件扩展名,因为它使用Objective-C和C ++。

其次,这个库看起来还没有被编译为armv7 ,所以你需要重新构build你想要支持的任何体系结构,这将是一个或多个armv6armv7armv7si386 (iPhone模拟器)。

如果你的目标是iOS 5.0+,那么除了armv6以外,这些都是在Xcode的更高版本中不支持的。

第三,确保在库和应用程序中使用相同版本的C ++和C ++库,否则会发生不好的事情。

确保:

C ++语言方言设置“编译器默认”而不是“GNU ++ 11 [-std = gnu ++ 11]”

C ++标准库设置“编译器默认”而不是“libc ++(支持C ++ 11的LLVM C ++标准库)”

另请检查:

C语言方言设置“C00 [-std = c99]”而不是“GNU00 [-std = gnu99]”

和tesseract文件应该正确引用。 (拖放文件不正确引用)

 ld: -weak_library and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together clang: error: linker command failed with exit code 1 (use -v to see invocation) 
  1. 更改项目 – >项目 – >生成设置 – > **“启用位码”为NO

  2. 也删除“链接” – >“其他链接器标志”中的所有链接器标志并添加

链接器标志 3.之后,通过命令“pod install”安装pod,

它适用于Swift 2和Xcode 7.2(testing版)