使用iOS 7或更高版本的静态库时出错

时间:2014-12-11 19:09:02

标签: ios objective-c static-libraries

我有一个示例项目,其中包含一个名为“libReaderFramework.a”的静态库,当主项目(包含静态库的项目)的目标iOS 6或更低版本时,该库可以编译并运行完美。但是,如果我将目标设置为iOS 7或更高版本,则会出现以下错误:

    Undefined symbols for architecture armv7:
  "std::_List_node_base::hook(std::_List_node_base*)", referenced from:
      std::list<uft::Value*, std::allocator<uft::Value*> >::_M_insert(std::_List_iterator<uft::Value*>, uft::Value* const&) in libReaderFramework.a(xpath_yacc.o)
  "std::__throw_length_error(char const*)", referenced from:
      std::vector<empdf::PDFDocument::pdfPageCacheEntry, std::allocator<empdf::PDFDocument::pdfPageCacheEntry> >::_M_insert_aux(__gnu_cxx::__normal_iterator<empdf::PDFDocument::pdfPageCacheEntry*, std::vector<empdf::PDFDocument::pdfPageCacheEntry, std::allocator<empdf::PDFDocument::pdfPageCacheEntry> > >, empdf::PDFDocument::pdfPageCacheEntry const&) in libReaderFramework.a(embed_pdf_t3.o)
      std::deque<mdom::Node, std::allocator<mdom::Node> >::_M_new_elements_at_back(unsigned long) in libReaderFramework.a(xpath_context.o)
      std::deque<mdom::Node, std::allocator<mdom::Node> >::_M_new_elements_at_front(unsigned long) in libReaderFramework.a(xpath_context.o)
      std::vector<empdf::CLayout::OpacityInfoRec, std::allocator<empdf::CLayout::OpacityInfoRec> >::_M_insert_aux(__gnu_cxx::__normal_iterator<empdf::CLayout::OpacityInfoRec*, std::vector<empdf::CLayout::OpacityInfoRec, std::allocator<empdf::CLayout::OpacityInfoRec> > >, empdf::CLayout::OpacityInfoRec const&) in libReaderFramework.a(embed_pdf_t3_layout.o)
      std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<layout::AreaTreeNode**, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > >, layout::AreaTreeNode* const&) in libReaderFramework.a(layout_block.o)
      std::vector<int, std::allocator<int> >::_M_insert_aux(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&) in libReaderFramework.a(layout_block.o)
  "std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from:
      std::_Rb_tree_iterator<std::pair<tetraphilia::pdf::store::DictionaryKey const, unsigned long> >::operator++() in libReaderFramework.a(embed_pdf_t3.o)
      std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator++() in libReaderFramework.a(xpath_context.o)
      std::_Rb_tree_iterator<std::pair<int const, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > > >::operator++(int) in libReaderFramework.a(layout_block.o)
      std::_Rb_tree_iterator<std::pair<int const, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > > >::operator++() in libReaderFramework.a(layout_block.o)
      std::_Rb_tree_iterator<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > >::operator++(int) in libReaderFramework.a(layout_block.o)
      std::_Rb_tree_iterator<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > >::operator++() in libReaderFramework.a(layout_block.o)
  "std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:
      std::_Rb_tree_iterator<std::pair<tetraphilia::pdf::store::DictionaryKey const, unsigned long> >::operator--() in libReaderFramework.a(embed_pdf_t3.o)
      std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator--() in libReaderFramework.a(xpath_context.o)
      std::_Rb_tree_iterator<std::pair<int const, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > > >::operator--() in libReaderFramework.a(layout_block.o)
      std::_Rb_tree_iterator<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > >::operator--() in libReaderFramework.a(layout_block.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<tetraphilia::pdf::store::DictionaryKey, std::pair<tetraphilia::pdf::store::DictionaryKey const, unsigned long>, std::_Select1st<std::pair<tetraphilia::pdf::store::DictionaryKey const, unsigned long> >, tetraphilia::pdf::store::DictionaryKeyOrdering, std::allocator<std::pair<tetraphilia::pdf::store::DictionaryKey const, unsigned long> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<tetraphilia::pdf::store::DictionaryKey const, unsigned long> const&) in libReaderFramework.a(embed_pdf_t3.o)
      std::_Rb_tree<uft::Value, std::pair<uft::Value const, xpath::DynamicContext*>, std::_Select1st<std::pair<uft::Value const, xpath::DynamicContext*> >, xpath::Context::ValueCompare, std::allocator<std::pair<uft::Value const, xpath::DynamicContext*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<uft::Value const, xpath::DynamicContext*> const&) in libReaderFramework.a(xpath_context.o)
      std::_Rb_tree<int, std::pair<int const, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > >, std::_Select1st<std::pair<int const, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > > >, std::less<int>, std::allocator<std::pair<int const, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<int const, std::vector<layout::AreaTreeNode*, std::allocator<layout::AreaTreeNode*> > > const&) in libReaderFramework.a(layout_block.o)
      std::_Rb_tree<layout::ContainerNode*, std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> >, std::_Select1st<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > >, std::less<layout::ContainerNode*>, std::allocator<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > const&) in libReaderFramework.a(layout_block.o)
  "std::string::append(std::string const&)", referenced from:
      std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libReaderFramework.a(curlnetprovider.o)
  "std::string::append(char const*)", referenced from:
      std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) in libReaderFramework.a(curlnetprovider.o)
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()", referenced from:
      DLProxyInfo::DLProxyInfo(DLProxyInfo const&) in libReaderFramework.a(DLProxyInfo.o)
      DLProxySettingsController::getSystemProxySettings() in libReaderFramework.a(DLProxySettingsController.o)
  "std::string::empty() const", referenced from:
      NSStringFromString(std::string const&) in libReaderFramework.a(DLHelpers.o)
      CurlStream::CurlStream(dp::String const&, dp::String const&, dpio::StreamClient*, dpio::Stream*, bool) in libReaderFramework.a(curlnetprovider.o)
      DLProxySettingsController::getSystemProxySettings() in libReaderFramework.a(DLProxySettingsController.o)
      DLProxySettingsController::updateProxyCredentials(std::string const&, std::string const&, std::string const&) in libReaderFramework.a(DLProxySettingsController.o)
  "std::allocator<char>::allocator()", referenced from:
      GetStringFromCFString(__CFString const*) in libReaderFramework.a(DLHelpers.o)
      StringFromNSString(NSString*) in libReaderFramework.a(DLHelpers.o)
      DLProxyInfo::DLProxyInfo() in libReaderFramework.a(DLProxyInfo.o)
      DLProxyInfo::DLProxyInfo(std::string const&, int, bool, std::string const&, std::string const&, bool) in libReaderFramework.a(DLProxyInfo.o)
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
      GetStringFromCFString(__CFString const*) in libReaderFramework.a(DLHelpers.o)
      StringFromNSString(NSString*) in libReaderFramework.a(DLHelpers.o)
      DLProxyInfo::DLProxyInfo() in libReaderFramework.a(DLProxyInfo.o)
      DLProxyInfo::DLProxyInfo(std::string const&, int, bool, std::string const&, std::string const&, bool) in libReaderFramework.a(DLProxyInfo.o)
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:
      DLProxyInfo::DLProxyInfo(std::string const&, int, bool, std::string const&, std::string const&, bool) in libReaderFramework.a(DLProxyInfo.o)
      DLProxyInfo::getHostName() in libReaderFramework.a(curlnetprovider.o)
      DLProxyInfo::getUsername() in libReaderFramework.a(curlnetprovider.o)
      DLProxyInfo::getPassword() in libReaderFramework.a(curlnetprovider.o)
      std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libReaderFramework.a(curlnetprovider.o)
      std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) in libReaderFramework.a(curlnetprovider.o)
  "std::ios_base::Init::Init()", referenced from:
      ___cxx_global_var_init in libReaderFramework.a(RMDocumentHost.o)
      ___cxx_global_var_init in libReaderFramework.a(DLNetworkProxySettings.o)
      ___cxx_global_var_init in libReaderFramework.a(DLHelpers.o)
      ___cxx_global_var_init in libReaderFramework.a(DLProxySupport.o)
      ___cxx_global_var_init in libReaderFramework.a(DLProxyInfo.o)
      ___cxx_global_var_init in libReaderFramework.a(curlnetprovider.o)
      ___cxx_global_var_init in libReaderFramework.a(DLProxySettingsController.o)
      ...
  "std::string::operator=(std::string const&)", referenced from:
      GetStringFromCFString(__CFString const*) in libReaderFramework.a(DLHelpers.o)
      DLProxyInfo::setHostName(std::string const&) in libReaderFramework.a(DLProxyInfo.o)
      DLProxyInfo::setAutoURL(std::string const&) in libReaderFramework.a(DLProxyInfo.o)
      DLProxyInfo::setUsername(std::string const&) in libReaderFramework.a(DLProxyInfo.o)
      DLProxyInfo::setPassword(std::string const&) in libReaderFramework.a(DLProxyInfo.o)
      GetProxyUserCredentials(std::string const&, std::string&, std::string&) in libReaderFramework.a(DLProxyCredentialStorage.o)
  "std::allocator<char>::~allocator()", referenced from:
      GetStringFromCFString(__CFString const*) in libReaderFramework.a(DLHelpers.o)
      StringFromNSString(NSString*) in libReaderFramework.a(DLHelpers.o)
      DLProxyInfo::DLProxyInfo() in libReaderFramework.a(DLProxyInfo.o)
      DLProxyInfo::DLProxyInfo(std::string const&, int, bool, std::string const&, std::string const&, bool) in libReaderFramework.a(DLProxyInfo.o)
  "std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
      RMDocumentHostImpl::reportLoadingState(int) in libReaderFramework.a(RMDocumentHost.o)
  "std::cout", referenced from:
      RMDocumentHostImpl::reportLoadingState(int) in libReaderFramework.a(RMDocumentHost.o)
  "std::ios_base::Init::~Init()", referenced from:
      ___cxx_global_var_init in libReaderFramework.a(RMDocumentHost.o)
      ___cxx_global_var_init in libReaderFramework.a(DLNetworkProxySettings.o)
      ___cxx_global_var_init in libReaderFramework.a(DLHelpers.o)
      ___cxx_global_var_init in libReaderFramework.a(DLProxySupport.o)
      ___cxx_global_var_init in libReaderFramework.a(DLProxyInfo.o)
      ___cxx_global_var_init in libReaderFramework.a(curlnetprovider.o)
      ___cxx_global_var_init in libReaderFramework.a(DLProxySettingsController.o)
      ...
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
      +[DLNetworkProxySettings systemProxySettings] in libReaderFramework.a(DLNetworkProxySettings.o)
      +[DLNetworkProxySettings authenticationInfoAvailable] in libReaderFramework.a(DLNetworkProxySettings.o)
      +[DLNetworkProxySettings saveProxyCredentials:] in libReaderFramework.a(DLNetworkProxySettings.o)
      +[DLNetworkProxySettings clearProxyCredentials:] in libReaderFramework.a(DLNetworkProxySettings.o)
      GetStringFromCFString(__CFString const*) in libReaderFramework.a(DLHelpers.o)
      UpdateSystemProxyCredentials(DLProxyInfo) in libReaderFramework.a(DLProxySupport.o)
      DLProxyInfo::DLProxyInfo() in libReaderFramework.a(DLProxyInfo.o)
      ...
  "std::string::c_str() const", referenced from:
      NSStringFromString(std::string const&) in libReaderFramework.a(DLHelpers.o)
      CurlStream::CurlStream(dp::String const&, dp::String const&, dpio::StreamClient*, dpio::Stream*, bool) in libReaderFramework.a(curlnetprovider.o)
      GetProxyUserCredentials(std::string const&, std::string&, std::string&) in libReaderFramework.a(DLProxyCredentialStorage.o)
      SaveProxyUserCredentials(std::string const&, std::string const&, std::string const&) in libReaderFramework.a(DLProxyCredentialStorage.o)
      ClearProxyUserCredentials(std::string const&) in libReaderFramework.a(DLProxyCredentialStorage.o)
  "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:
      RMDocumentHostImpl::reportLoadingState(int) in libReaderFramework.a(RMDocumentHost.o)
  "std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
      std::_Rb_tree<uft::Value, std::pair<uft::Value const, xpath::DynamicContext*>, std::_Select1st<std::pair<uft::Value const, xpath::DynamicContext*> >, xpath::Context::ValueCompare, std::allocator<std::pair<uft::Value const, xpath::DynamicContext*> > >::erase(std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >) in libReaderFramework.a(xpath_context.o)
      std::_Rb_tree<layout::ContainerNode*, std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> >, std::_Select1st<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > >, std::less<layout::ContainerNode*>, std::allocator<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > > >::erase(std::_Rb_tree_iterator<std::pair<layout::ContainerNode* const, layout::AbsoluteVector<layout::AbsoluteItemInfo> > >) in libReaderFramework.a(layout_block.o)
  "std::ostream::operator<<(std::ostream& (*)(std::ostream&))", referenced from:
      RMDocumentHostImpl::reportLoadingState(int) in libReaderFramework.a(RMDocumentHost.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我有静态库的代码,我也生成它,但我不知道为什么我必须有一个目标iOS 6或更低版本才能使用静态库。 (我将静态库作为主项目的子项目)

1 个答案:

答案 0 :(得分:0)

看起来libReaderFramework.a就像使用libstdc ++作为标准C ++库而构建。在构建主项目时,标准库的选择可能默认为libc ++用于较新的目标。

您应该选择使用哪种。

(可以将这两者联系起来,但它很烦人且很脆弱。)