简体   繁体   中英

Getting “Undefined symbol for architecture arm64” error while building Swift project with Objective-C framework

I'm making iOS application with usage of JabberGuest framework from Cisco. I've followed their instruction (provided here ) with necessary adjustments. While building, compiler returns almost 100 errors, all around undefined symbol . Core of the application is written in Swift.

Part of error log below:

Undefined symbols for architecture arm64:
      "std::__1::recursive_mutex::recursive_mutex()", referenced from:
      csf::edge::IpInterfaceChangedEventFilter::IpInterfaceChangedEventFilter() in JabberGuest(IpInterfaceChangedEventFilter.o)
  "std::__1::recursive_mutex::~recursive_mutex()", referenced from:
      csf::edge::IpInterfaceChangedEventFilter::IpInterfaceChangedEventFilter() in JabberGuest(IpInterfaceChangedEventFilter.o)
      csf::edge::IpInterfaceChangedEventFilter::~IpInterfaceChangedEventFilter() in JabberGuest(IpInterfaceChangedEventFilter.o)
      csf::edge::IpInterfaceChangedEventFilter::~IpInterfaceChangedEventFilter() in JabberGuest(IpInterfaceChangedEventFilter.o)
  "std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      boost::regex_error::regex_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, boost::regex_constants::error_type, long) in JabberGuest(regex.o)
      boost::regex_error::regex_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, boost::regex_constants::error_type, long) in JabberGuest(regex.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::underflow()", referenced from:
      vtable for boost::re_detail_106501::parser_buf<char, std::__1::char_traits<char> > in JabberGuest(instances.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::pbackfail(int)", referenced from:
      vtable for boost::re_detail_106501::parser_buf<char, std::__1::char_traits<char> > in JabberGuest(instances.o)
[...]
JCFCoreUtils::EncryptionUtils::privateKeyDecryptToFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, csf::SecureString const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in JabberGuest(EncryptionUtils.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::insert(std::__1::__wrap_iter<char const*>, char)", referenced from:
      boost::re_detail_106501::basic_regex_creator<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::append_set(boost::re_detail_106501::basic_char_set<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, mpl_::bool_<false>*) in JabberGuest(instances.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in JabberGuest(ObjectFoundry.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in JabberGuest(ObjcLibraryLoader.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in JabberGuest(FileUtils.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in JabberGuest(UnifiedFactory.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in JabberGuest(ServicesDispatcher.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in JabberGuest(Base64FamilyEncoder.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in JabberGuest(TaskDispatcher.o)
      ...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

My header looks like this:

#ifndef _ltProjectName_gt_Bridging_Header_h
#define _ltProjectName_gt_Bridging_Header_h
#import "Frameworks/JabberGuest.framework/Headers/JabberGuest.h"

#endif 

In build setting, I have Framework Search Path correctly set, Objective-C Bridging Header for both Debug and Release set on correct file, added VALID_ARCHS on armv7 arm64 , Architectures set on Standard Achritectures (arm64 armv7) . All the necessary libraries are linked in Link Binary With Libraries .

I've tried cleaning Xcode and cache, adding $(inherited) to Other Linker Flags , set Yes to Enable Modules (C and Objective-C) . There are no pods in use nor any other 3rd party frameworks.

I'm checking if the project builds right now, without implementing any of methods in other files, so there are no more changes in my project.

Thanks in advance for all the help.

It looks like libc++.dylib is not linked to the project.

  1. Select the project file
  2. select the target
  3. Select the Build Phases sub-tab
  4. Under Link Binary with Libraries press the + button
  5. Select libc++.dylib and press Add

Another option is to try to add -lc++ to the OTHER_LDFLAGS .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM