title: Linker errors when adding firebase framework to ios project
body: <p>I've been trying to add the firebase framework to my ios app. I was following the instructions here: <a href="https://www.firebase.com/docs/ios-quickstart.html" rel="nofollow">https://www.firebase.com/docs/ios-quickstart.html</a>. When I try to compile my project, or even the firebase template project I get a ton of linker erros. (I could paste them here if someone is interested but it's a lot of text) The firebase framework requires these frameworks and I've made sure to include them all.</p>
  
  <pre><code>libicucore.dylib
  CFNetwork.framework
  Security.framework
  SystemConfiguration.framework
  </code></pre>
  
  <p>Is there some other framework I'm missing that wasn't listed? I have no idea what's going on. Thanks for the help!</p>
  
  <hr>
  
  <p>Edit: Here are the errors</p>
  
  <blockquote>
    <p>Undefined symbols for architecture i386:
      "std::<strong>1::basic_string, std::__1::allocator >::compare(char const*) const", referenced from:
          leveldb::VersionSet::Recover() in Firebase(version_set.o)
      "std::_<em>1::</em>_vector_base_common::__throw_length_error() const", referenced from:
          void std::_<em>1::vector >::</em>_push_back_slow_path(leveldb::Iterator* const&amp;) in Firebase(db_impl.o)
          void std::_<em>1::vector >::</em>_push_back_slow_path(leveldb::DBImpl::CompactionState::Output const&amp;) in Firebase(db_impl.o)
          void std::_<em>1::vector >::</em>_push_back_slow_path(unsigned long long const&amp;) in Firebase(db_impl.o)
          void std::_<em>1::vector, std::__1::allocator > >::</em>_push_back_slow_path const>(std::__1::pair const&amp;) in Firebase(db_impl.o)
          std::__1::enable_if&lt;__is_forward_iterator >::value, std::_<em>1::</em>_wrap_iter >::type std::_<em>1::vector >::insert >(std::</em>_1::__wrap_iter, std::_<em>1::</em>_wrap_iter, std::_<em>1::</em>_wrap_iter) in Firebase(version_set.o)
          std::_<em>1::vector >::</em>_append(unsigned long) in Firebase(version_set.o)
          std::__1::enable_if&lt;__is_forward_iterator::value, void>::type std::__1::vector >::assign(leveldb::FileMetaData*<em>, leveldb::FileMetaData</em>*) in Firebase(version_set.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::__init(char const*, unsigned long)", referenced from:
          -[APLevelDB initWithPath:error:] in Firebase(APLevelDB.o)
          leveldb::DBImpl::NewDB() in Firebase(db_impl.o)
          leveldb::Status::ToString() const in Firebase(status.o)
          leveldb::VersionSet::WriteSnapshot(leveldb::log::Writer*) in Firebase(version_set.o)
          leveldb::VersionSet::SetupOtherInputs(leveldb::Compaction*) in Firebase(version_set.o)
          leveldb::VersionSet::Builder::Apply(leveldb::VersionEdit*) in Firebase(version_set.o)
          leveldb::SetCurrentFile(leveldb::Env*, std::__1::basic_string, std::__1::allocator > const&amp;, unsigned long long) in Firebase(filename.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::__init(char const*, unsigned long, unsigned long)", referenced from:
          leveldb::DBImpl::DeleteObsoleteFiles() in Firebase(db_impl.o)
          leveldb::DestroyDB(std::__1::basic_string, std::__1::allocator > const&amp;, leveldb::Options const&amp;) in Firebase(db_impl.o)
          leveldb::VersionSet::Recover() in Firebase(version_set.o)
          leveldb::MakeFileName(std::__1::basic_string, std::__1::allocator > const&amp;, unsigned long long, char const*) in Firebase(filename.o)
          leveldb::DescriptorFileName(std::__1::basic_string, std::__1::allocator > const&amp;, unsigned long long) in Firebase(filename.o)
          leveldb::CurrentFileName(std::__1::basic_string, std::__1::allocator > const&amp;) in Firebase(filename.o)
          leveldb::LockFileName(std::__1::basic_string, std::__1::allocator > const&amp;) in Firebase(filename.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::append(char const*)", referenced from:
          leveldb::DBImpl::GetProperty(leveldb::Slice const&amp;, std::__1::basic_string, std::__1::allocator >*) in Firebase(db_impl.o)
          leveldb::Version::DebugString() const in Firebase(version_set.o)
          leveldb::VersionEdit::DebugString() const in Firebase(version_edit.o)
          leveldb::TableBuilder::Finish() in Firebase(table_builder.o)
          leveldb::ParsedInternalKey::DebugString() const in Firebase(dbformat.o)
          leveldb::AppendNumberTo(std::__1::basic_string, std::__1::allocator >*, unsigned long long) in Firebase(logging.o)
          leveldb::AppendEscapedStringTo(std::__1::basic_string, std::__1::allocator >*, leveldb::Slice const&amp;) in Firebase(logging.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::append(char const*, unsigned long)", referenced from:
          leveldb::WriteBatchInternal::Append(leveldb::WriteBatch*, leveldb::WriteBatch const*) in Firebase(write_batch.o)
          leveldb::DBImpl::DeleteObsoleteFiles() in Firebase(db_impl.o)
          leveldb::DestroyDB(std::__1::basic_string, std::__1::allocator > const&amp;, leveldb::Options const&amp;) in Firebase(db_impl.o)
          leveldb::Status::ToString() const in Firebase(status.o)
          leveldb::Version::DebugString() const in Firebase(version_set.o)
          leveldb::VersionSet::Recover() in Firebase(version_set.o)
          leveldb::MakeFileName(std::__1::basic_string, std::__1::allocator > const&amp;, unsigned long long, char const*) in Firebase(filename.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::assign(char const*)", referenced from:
          leveldb::DBImpl::GetProperty(leveldb::Slice const&amp;, std::__1::basic_string, std::__1::allocator >*) in Firebase(db_impl.o)
          leveldb::InternalKey::DebugString() const in Firebase(dbformat.o)
          leveldb::(anonymous namespace)::PosixEnv::GetTestDirectory(std::__1::basic_string, std::__1::allocator >*) in Firebase(env_posix.o)
      "std::__1::basic_string, std::__1::allocator >::assign(char const*, unsigned long)", referenced from:
          leveldb::WriteBatchInternal::SetContents(leveldb::WriteBatch*, leveldb::Slice const&amp;) in Firebase(write_batch.o)
          leveldb::DBImpl::DoCompactionWork(leveldb::DBImpl::CompactionState*) in Firebase(db_impl.o)
          leveldb::BuildTable(std::__1::basic_string, std::__1::allocator > const&amp;, leveldb::Env*, leveldb::Options const&amp;, leveldb::TableCache*, leveldb::Iterator*, leveldb::FileMetaData*) in Firebase(builder.o)
          leveldb::SaveValue(void*, leveldb::Slice const&amp;, leveldb::Slice const&amp;) in Firebase(version_set.o)
          leveldb::VersionSet::WriteSnapshot(leveldb::log::Writer*) in Firebase(version_set.o)
          leveldb::VersionEdit::DecodeFrom(leveldb::Slice const&amp;) in Firebase(version_edit.o)
          leveldb::TableBuilder::Add(leveldb::Slice const&amp;, leveldb::Slice const&amp;) in Firebase(table_builder.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::resize(unsigned long, char)", referenced from:
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          leveldb::WriteBatch::Clear() in Firebase(write_batch.o)
          leveldb::VersionSet::Recover() in Firebase(version_set.o)
          leveldb::(anonymous namespace)::BytewiseComparatorImpl::FindShortestSeparator(std::__1::basic_string, std::__1::allocator >*, leveldb::Slice const&amp;) const in Firebase(comparator.o)
          leveldb::(anonymous namespace)::BytewiseComparatorImpl::FindShortSuccessor(std::__1::basic_string, std::__1::allocator >*) const in Firebase(comparator.o)
          leveldb::BlockBuilder::Add(leveldb::Slice const&amp;, leveldb::Slice const&amp;) in Firebase(block_builder.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::push_back(char)", referenced from:
          leveldb::WriteBatch::Put(leveldb::Slice const&amp;, leveldb::Slice const&amp;) in Firebase(write_batch.o)
          leveldb::WriteBatch::Delete(leveldb::Slice const&amp;) in Firebase(write_batch.o)
          leveldb::Version::DebugString() const in Firebase(version_set.o)
          leveldb::AppendEscapedStringTo(std::__1::basic_string, std::__1::allocator >*, leveldb::Slice const&amp;) in Firebase(logging.o)
          leveldb::EscapeString(leveldb::Slice const&amp;) in Firebase(logging.o)
          leveldb::FilterBlockBuilder::Finish() in Firebase(filter_block.o)
      "std::__1::basic_string, std::__1::allocator >::basic_string(std::__1::basic_string, std::__1::allocator > const&amp;)", referenced from:
          leveldb::DBImpl::DBImpl(leveldb::Options const&amp;, std::__1::basic_string, std::__1::allocator > const&amp;) in Firebase(db_impl.o)
          leveldb::DBImpl::OpenCompactionOutputFile(leveldb::DBImpl::CompactionState*) in Firebase(db_impl.o)
          leveldb::VersionEdit::AddFile(int, unsigned long long, unsigned long long, leveldb::InternalKey const&amp;, leveldb::InternalKey const&amp;) in Firebase(db_impl.o)
          void std::_<em>1::vector >::</em>_push_back_slow_path(leveldb::DBImpl::CompactionState::Output const&amp;) in Firebase(db_impl.o)
          void std::_<em>1::vector, std::__1::allocator > >::</em>_push_back_slow_path const>(std::__1::pair const&amp;) in Firebase(db_impl.o)
          std::_<em>1::vector, std::__1::allocator > >::</em>_swap_out_circular_buffer(std::_<em>1::</em>_split_buffer, std::__1::allocator >&amp;>&amp;) in Firebase(db_impl.o)
          leveldb::Status::ToString() const in Firebase(status.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::~basic_string()", referenced from:
          -[APLevelDB initWithPath:error:] in Firebase(APLevelDB.o)
          -[APLevelDB dataForKey:] in Firebase(APLevelDB.o)
          -[APLevelDB stringForKey:] in Firebase(APLevelDB.o)
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          leveldb::WriteBatch::~WriteBatch() in Firebase(write_batch.o)
          leveldb::WriteBatch::~WriteBatch() in Firebase(write_batch.o)
          ...
      "std::__1::basic_string, std::__1::allocator >::operator=(std::__1::basic_string, std::__1::allocator > const&amp;)", referenced from:
          leveldb::DBImpl::NewDB() in Firebase(db_impl.o)
          leveldb::DBImpl::TEST_CompactRange(int, leveldb::Slice const*, leveldb::Slice const*) in Firebase(db_impl.o)
          leveldb::DBImpl::BackgroundCompaction() in Firebase(db_impl.o)
          leveldb::DBImpl::GetProperty(leveldb::Slice const&amp;, std::__1::basic_string, std::__1::allocator >*) in Firebase(db_impl.o)
          leveldb::VersionEdit::AddFile(int, unsigned long long, unsigned long long, leveldb::InternalKey const&amp;, leveldb::InternalKey const&amp;) in Firebase(db_impl.o)
          leveldb::VersionSet::LogAndApply(leveldb::VersionEdit*, leveldb::port::Mutex*) in Firebase(version_set.o)
          leveldb::VersionSet::WriteSnapshot(leveldb::log::Writer*) in Firebase(version_set.o)
          ...
      "void std::_<em>1::</em>_sort&amp;, unsigned long long*>(unsigned long long*, unsigned long long*, std::_<em>1::</em>_less&amp;)", referenced from:
          leveldb::DBImpl::Recover(leveldb::VersionEdit*) in Firebase(db_impl.o)
      "std::terminate()", referenced from:
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          leveldb::SanitizeOptions(std::__1::basic_string, std::__1::allocator > const&amp;, leveldb::InternalKeyComparator const*, leveldb::InternalFilterPolicy const*, leveldb::Options const&amp;) in Firebase(db_impl.o)
          leveldb::DBImpl::DBImpl(leveldb::Options const&amp;, std::__1::basic_string, std::__1::allocator > const&amp;) in Firebase(db_impl.o)
          leveldb::DBImpl::~DBImpl() in Firebase(db_impl.o)
          leveldb::DBImpl::NewDB() in Firebase(db_impl.o)
          leveldb::DBImpl::MaybeIgnoreError(leveldb::Status*) const in Firebase(db_impl.o)
          ...
      "vtable for _<em>cxxabiv1::</em>_class_type_info", referenced from:
          typeinfo for leveldb::WriteBatch::Handler in Firebase(write_batch.o)
          typeinfo for leveldb::DB in Firebase(db_impl.o)
          typeinfo for leveldb::Snapshot in Firebase(db_impl.o)
          typeinfo for leveldb::Comparator in Firebase(comparator.o)
          typeinfo for leveldb::Cache in Firebase(cache.o)
          typeinfo for leveldb::FilterPolicy in Firebase(filter_policy.o)
          typeinfo for leveldb::Env in Firebase(env.o)
          ...
      NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
      "vtable for _<em>cxxabiv1::</em>_si_class_type_info", referenced from:
          typeinfo for leveldb::(anonymous namespace)::MemTableInserter in Firebase(write_batch.o)
          typeinfo for leveldb::DBImpl in Firebase(db_impl.o)
          typeinfo for leveldb::DBImpl::RecoverLogFile(unsigned long long, leveldb::VersionEdit*, unsigned long long*)::LogReporter in Firebase(db_impl.o)
          typeinfo for leveldb::SnapshotImpl in Firebase(db_impl.o)
          typeinfo for leveldb::VersionSet::Recover()::LogReporter in Firebase(version_set.o)
          typeinfo for leveldb::Version::LevelFileNumIterator in Firebase(version_set.o)
          typeinfo for leveldb::(anonymous namespace)::BytewiseComparatorImpl in Firebase(comparator.o)
          ...
      NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
      "operator delete", referenced from:
          -[APLevelDB initWithPath:error:] in Firebase(APLevelDB.o)
          -[APLevelDB setData:forKey:] in Firebase(APLevelDB.o)
          -[APLevelDB setString:forKey:] in Firebase(APLevelDB.o)
          -[APLevelDB dataForKey:] in Firebase(APLevelDB.o)
          -[APLevelDB stringForKey:] in Firebase(APLevelDB.o)
          -[APLevelDB removeKey:] in Firebase(APLevelDB.o)
          -[APLevelDB commitWriteBatch:] in Firebase(APLevelDB.o)
          ...
      "operator delete(void*)", referenced from:
          leveldb::WriteBatch::Handler::~Handler() in Firebase(write_batch.o)
          leveldb::(anonymous namespace)::MemTableInserter::~MemTableInserter() in Firebase(write_batch.o)
          leveldb::DBImpl::DBImpl(leveldb::Options const&amp;, std::__1::basic_string, std::__1::allocator > const&amp;) in Firebase(db_impl.o)
          leveldb::DBImpl::~DBImpl() in Firebase(db_impl.o)
          leveldb::DBImpl::~DBImpl() in Firebase(db_impl.o)
          leveldb::DBImpl::DeleteObsoleteFiles() in Firebase(db_impl.o)
          leveldb::DBImpl::Recover(leveldb::VersionEdit*) in Firebase(db_impl.o)
          ...
      "operator new[](unsigned long)", referenced from:
          leveldb::Status::CopyState(char const*) in Firebase(status.o)
          leveldb::Status::Status(leveldb::Status::Code, leveldb::Slice const&amp;, leveldb::Slice const&amp;) in Firebase(status.o)
          leveldb::Status::Status(leveldb::Status::Code, leveldb::Slice const&amp;, leveldb::Slice const&amp;) in Firebase(status.o)
          leveldb::VersionSet::MakeInputIterator(leveldb::Compaction*) in Firebase(version_set.o)
          leveldb::(anonymous namespace)::HandleTable::Resize() in Firebase(cache.o)
          leveldb::LookupKey::LookupKey(leveldb::Slice const&amp;, unsigned long long) in Firebase(dbformat.o)
          leveldb::LookupKey::LookupKey(leveldb::Slice const&amp;, unsigned long long) in Firebase(dbformat.o)
          ...
      "operator new(unsigned long)", referenced from:
          leveldb::DBImpl::DBImpl(leveldb::Options const&amp;, std::__1::basic_string, std::__1::allocator > const&amp;) in Firebase(db_impl.o)
          leveldb::DBImpl::RecoverLogFile(unsigned long long, leveldb::VersionEdit*, unsigned long long*) in Firebase(db_impl.o)
          leveldb::DBImpl::BackgroundCompaction() in Firebase(db_impl.o)
          leveldb::DBImpl::OpenCompactionOutputFile(leveldb::DBImpl::CompactionState*) in Firebase(db_impl.o)
          leveldb::DBImpl::NewInternalIterator(leveldb::ReadOptions const&amp;, unsigned long long*) in Firebase(db_impl.o)
          leveldb::DBImpl::GetSnapshot() in Firebase(db_impl.o)
          leveldb::DBImpl::MakeRoomForWrite(bool) in Firebase(db_impl.o)
          ...
      "</strong>_cxa_begin_catch", referenced from:
          std::<strong>1::deque >::__add_back_capacity() in Firebase(db_impl.o)
          leveldb::(anonymous namespace)::PosixEnv::Schedule(void (<em>)(void</em>), void*) in Firebase(env_posix.o)
      "</strong>_cxa_call_unexpected", referenced from:
          leveldb::DBImpl::DeleteObsoleteFiles() in Firebase(db_impl.o)
          leveldb::DBImpl::Recover(leveldb::VersionEdit*) in Firebase(db_impl.o)
          leveldb::DBImpl::CleanupCompaction(leveldb::DBImpl::CompactionState*) in Firebase(db_impl.o)
          leveldb::DestroyDB(std::<strong>1::basic_string, std::__1::allocator > const&amp;, leveldb::Options const&amp;) in Firebase(db_impl.o)
          void std::_<em>1::vector >::</em>_push_back_slow_path(leveldb::DBImpl::CompactionState::Output const&amp;) in Firebase(db_impl.o)
          void std::_<em>1::vector, std::__1::allocator > >::</em>_push_back_slow_path const>(std::__1::pair const&amp;) in Firebase(db_impl.o)
          leveldb::VersionEdit::~VersionEdit() in Firebase(db_impl.o)
          ...
      "</strong>_cxa_end_catch", referenced from:
          std::<strong>1::deque >::__add_back_capacity() in Firebase(db_impl.o)
          leveldb::(anonymous namespace)::PosixEnv::Schedule(void (<em>)(void</em>), void*) in Firebase(env_posix.o)
      "</strong>_cxa_pure_virtual", referenced from:
          vtable for leveldb::WriteBatch::Handler in Firebase(write_batch.o)
          vtable for leveldb::DB in Firebase(db_impl.o)
          vtable for leveldb::Comparator in Firebase(comparator.o)
          vtable for leveldb::Cache in Firebase(cache.o)
          vtable for leveldb::FilterPolicy in Firebase(filter_policy.o)
          vtable for leveldb::Env in Firebase(env.o)
          vtable for leveldb::SequentialFile in Firebase(env.o)
          ...
      "<strong>_cxa_rethrow", referenced from:
          std::_<em>1::deque >::</em>_add_back_capacity() in Firebase(db_impl.o)
          leveldb::(anonymous namespace)::PosixEnv::Schedule(void (<em>)(void</em>), void*) in Firebase(env_posix.o)
      "</strong>_gxx_personality_v0", referenced from:
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(APLevelDB.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(write_batch.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(db_impl.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(status.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(builder.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(version_set.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(table_cache.o)
          ...
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          leveldb::WriteBatch::WriteBatch() in Firebase(write_batch.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(APLevelDB.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(write_batch.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(db_impl.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(status.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(builder.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(version_set.o)
          Dwarf Exception Unwind Info (__eh_frame) in Firebase(table_cache.o)
          ...
          leveldb::SanitizeOptions(std::__1::basic_string, std::__1::allocator > const&amp;, leveldb::InternalKeyComparator const*, leveldb::InternalFilterPolicy const*, leveldb::Options const&amp;) in Firebase(db_impl.o)
          leveldb::DBImpl::DBImpl(leveldb::Options const&amp;, std::__1::basic_string, std::__1::allocator > const&amp;) in Firebase(db_impl.o)
          leveldb::DBImpl::~DBImpl() in Firebase(db_impl.o)
          ...
    ld: symbol(s) not found for architecture i386
    clang: error: linker command failed with exit code 1 (use -v to see invocation)</p>
  </blockquote>