本文介绍了向ios项目添加firebase框架时的链接器错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我一直在尝试将firebase框架添加到我的iOS应用程序中。我按照这里的说明: https://www.firebase.com/docs/ios- quickstart.html 。当我尝试编译我的项目,甚至是Firebase模板项目时,我都会遇到大量的链接器错误。 (如果有人感兴趣,我可以将它们粘贴到这里)但是Firebase框架需要这些框架,我已经确保将它们全部包含在内。 libicucore.dylib CFNetwork.framework Security.framework SystemConfiguration.framework 有没有其他的框架,我想念没有列出?我不知道发生了什么事。感谢您的帮助! 编辑:这里是错误 架构i386的未定义符号:std :: 1 :: basic_string,std :: __ 1 :: allocator> :: compare(char const *)const,引用自: leveldb :: VersionSet :: Firebase(version_set.o)中的Recover()std :: _ 1 :: _vector_base_common :: __ throw_length_error()const ,在Firebase(db_impl.o)中引用: void std :: _ em> 1 :: vector> :: _push_back_slow_path(leveldb :: Iterator * const& amp; amp; $) void std在Firebase(db_impl.o)中的:: _ 1 :: vector> :: _push_back_slow_path(leveldb :: DBImpl :: CompactionState :: Output const&) void std :: _ 1 :: vector> ::在Firebase(db_impl.o)中的_push_back_slow_path(unsigned long long const&) void std :: _ 1 :: vector,std :: __ 1 ::在Firebase(db_impl.o)中的allocator>> :: _push_back_slow_path const>(std :: __ 1 :: pair const&)$ b $ std :: __ 1 :: enable_i f :: is_forward_iterator :: value,std :: _ 1 :: _wrap_iter> :: type std :: _ 1 :: vector> :: insert>(std :: 1 :: _wrap_iter,std :: _ 1 :: _wrap_iter) std :: _ 1 :: vector> :: Firebase(version_set.o)中的_append(无符号长整数) std :: __ 1 :: enable_if< __ is_forward_iterator :: value,void> ::在Firebase(version_set.o)中输入std :: __ 1 :: vector> :: assign(leveldb :: FileMetaData * ,leveldb :: FileMetaData *) ... 在Firebase(APLevelDB)中引用: - [APLevelDB initWithPath:error:]std :: __ 1 :: basic_string,std :: __ 1 :: allocator> :: __ init(char const *,unsigned long) o)b $ b leveldb :: DBImpl :: NewDB()in Firebase(db_impl.o) leveldb :: Status :: ToString()const in Firebase(status.o) leveldb :: Firebase(version_set.o)中的VersionSet :: WriteSnapshot(leveldb :: log :: Writer *) leveldb :: VersionSet :: SetupOtherInputs(leveldb :: Compaction *) 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&,unsigned long long)in Firebase(filename.o) ... std :: __ 1 :: basic_string, std :: __ 1 :: allocator> :: __ init(char const,unsigned long,unsigned long),引用自: leveldb :: DBImpl :: Firebase(db_impl.o)中的DeleteObsoleteFiles()$ b $在Firebase(db_impl.o)中leveldb :: DestroyDB(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const& amp; amp; amp; leveldb :: Options const& amp; amp; amp; amp; amp; ()in Firebase(version_set.o) leveldb :: MakeFileName(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&,unsigned long long,char const *)in Firebase(filename。 o) leveldb :: DescriptorFileName(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&,unsigned long long)in Firebase(filename .o) leveldb :: CurrentFileName(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&)in Firebase(filename.o) leveldb :: LockFileName(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&)in Firebase(filename.o) ... std :: __ 1 :: basic_string,std :: __ 1 :: allocator > :: append(char const *),引用自: leveldb :: DBImpl :: GetProperty(leveldb :: Slice const&; std :: __ 1 :: basic_string,std :: __ 1 :: allocator> * )在Firebase(db_impl.o)中 leveldb :: Version :: DebugString()Firebase(version_set.o)中的常量 leveldb :: VersionEdit :: DebugString()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 :: basi在Firebase(logging.o) ... std :: __ 1 :: basic_string,std :: __ 1中的c_string,std :: __ 1 :: allocator> *,leveldb :: Slice const&)在firebase(write_batch。)中引用: leveldb :: WriteBatchInternal :: Append(leveldb :: WriteBatch *,leveldb :: WriteBatch const *):: allocator> :: append(char const *,unsigned long) o) leveldb :: DBImpl :: DeleteObsoleteFiles()in Firebase(db_impl.o) leveldb :: DestroyDB(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const& amp;在Firebase(db_impl.o)中的leveldb :: Options const&)在Firebase(status.o)中的Status :: ToString()const leveldb :: Version :: DebugString()const in Firebase(version_set.o) leveldb :: VersionSet :: Firebase(version_set.o)中的Recover() leveldb :: MakeFileName(std :: __ 1 :: basic_string,std :: __ 1 :: allocator > const&,; unsigned long long,char const *)in Firebase(filename.o) ... std :: __ 1 :: basic_string,std :: __ 1 :: allocator> :: ass在Firebase中引用来自 leveldb :: DBImpl :: GetProperty(leveldb :: Slice const& ;,; std :: __ 1 :: basic_string,std :: __ 1 :: allocator> *)的ign(char const *) (db_impl.o) leveldb :: InternalKey :: DebugString()const in Firebase(dbformat.o) leveldb :: :(匿名命名空间):: PosixEnv :: GetTestDirectory(std :: __ 1 ::在基本的字符串中,std :: __ 1 :: allocator> *)in Firebase(env_posix.o)std :: __ 1 :: basic_string,std :: __ 1 :: allocator> :: assign(char const *,unsigned long ),引用自Firebase(write_batch.o)中的 leveldb :: WriteBatchInternal :: SetContents(leveldb :: WriteBatch *,leveldb :: Slice const&) leveldb :: DBImpl :: DoCompactionWork leveldb :: DBImpl :: CompactionState *)in Firebase(db_impl.o) leveldb :: BuildTable(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&,; leveldb :: Env *, leveldb ::选项const&,leveldb :: TableCache *,leveldb :: Iterator *,leveldb :: FileMetaData *)在Firebase(builder.o) leveldb :: SaveValu firebase(version_set.o)中的e(void *,leveldb :: Slice const&,leveldb :: Slice const&)在Firebase中的 leveldb :: VersionSet :: WriteSnapshot(leveldb :: log :: Writer * version_set.o) leveldb :: VersionEdit :: Firebase(version_edit.o)中的DecodeFrom(leveldb :: Slice const&) leveldb :: TableBuilder :: Add(leveldb :: Slice const&; leveldb (table_builder.o) ... std :: __ 1 :: basic_string,std :: __ 1 :: allocator> :: resize(unsigned long,char) ,引用自: Firebase(write_batch.o)中的leveldb :: WriteBatch :: WriteBatch() Firebase(write_batch.o)中的leveldb :: WriteBatch :: WriteBatch() leveldb :: Firebase(write_batch.o)中的WriteBatch :: Clear() leveldb :: VersionSet :: Firebase(version_set.o)中的Recover() leveldb :: :(匿名命名空间):: BytewiseComparatorImpl: :FindShortestSeparator(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> *,leveldb :: Slice const&)const in Fire base(comparator.o) leveldb::(匿名命名空间):: BytewiseComparatorImpl :: FindShortSuccessor(std :: __ 1 :: basic_string,std :: __ 1 :: allocator> *)在Firebase(comparator.o) leveldb :: BlockBuilder ::在Firebase(block_builder.o)中添加(leveldb :: Slice const&; leveldb :: Slice const&) ... std :: __ 1: :base_string,std :: __ 1 :: allocator> :: push_back(char),引用自: leveldb :: WriteBatch :: Put(leveldb :: Slice const&,leveldb :: Slice const&) (write_batch.o) leveldb :: WriteBatch :: Delete(leveldb :: Slice const&)在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&)在Firebase(logging.o)中 leveldb :: Firebase(logging.o)中的EscapeString(leveldb :: Slice const&) 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&) ,在Firebase(db_impl.o)中引用: leveldb :: DBImpl :: DBImpl(leveldb :: Options const&; std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&) b $ b leveldb :: DBImpl :: OpenCompactionOutputFile(leveldb :: DBImpl :: CompactionState *)in Firebase(db_impl.o) leveldb :: VersionEdit :: AddFile(int,unsigned long long,unsigned long long,leveldb :: Firebase(db_impl.o)中的InternalKey const& ;,; leveldb :: InternalKey const& amp;) void std :: _ em> 1 :: vector> :: _push_back_slow_path(leveldb :: DBImpl: :CompactionState :: Output const&)in Firebase(db_impl.o) void std :: _ 1 :: vector,std :: __ 1 :: allocator>> :: _push_back_slow_path const> (std :: __ 1 :: pair const&)in Firebase(db_impl.o) std :: _ 1 :: vector,std :: __ 1 :: allocator>> :: _swap_out_circular_buffer (标准:: _ 1 :: _在firebase(db_impl.o)中$ split_buffer,std :: __ 1 :: allocator>&>&) leveldb :: Status :: ToString()const in Firebase(status.o) .. 。std :: __ 1 :: basic_string,std :: __ 1 :: allocator> ::〜basic_string(),在Firebase(APLevelDB。 o) - Firebase(APLevelDB.o)中的[APLevelDB dataForKey:] - Firebase(APLevelDB.o)中的[APLevelDB stringForKey:] leveldb :: WriteBatch :: WriteBatch()in Firebase(write_batch.o) Firebase(write_batch.o)中的leveldb :: WriteBatch :: WriteBatch() Firebase(Write_batch.o)中的WriteBatch() b leveldb :: WriteBatch ::〜Firebase(write_batch.o)中的WriteBatch() ... std :: __ 1 :: basic_string,std :: __ 1 :: allocator> :: operator = (std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&),引用自: leveldb :: DBImpl :: Firebase(db_impl.o)中的NewDB() leveldb :: DBImpl :: TE Firebase(db_impl.o)中的ST_CompactRange(int,leveldb :: Slice const *,leveldb :: Slice const *) Firebase(db_impl.o)中的leveldb :: DBImpl :: BackgroundCompaction() leveldb :: Firebase(db_impl.o)中的DBImpl :: GetProperty(leveldb :: Slice const&; std :: __ 1 :: basic_string,std :: __ 1 :: allocator> *) leveldb :: VersionEdit :: AddFile (db_impl.o) leveldb :: VersionSet :: LogAndApply(leveldb :: VersionEdit *,)中的(int,unsigned long long,unsigned long long,leveldb :: InternalKey const& ;, leveldb :: InternalKey const& Firebase(version_set.o)中的leveldb :: port :: Mutex *) Firebase(version_set.o)中的 leveldb :: VersionSet :: WriteSnapshot(leveldb :: log :: Writer *) .. 。void std :: _ 1 :: _sort&;,unsigned long long *>(unsigned long long *,unsigned long long *,std :: _ 1 :: ($ db $ b leveldb :: DBImpl :: Firebase(db_impl.o)中的Recover(leveldb :: VersionEdit *)std :: terminate()中引用的 _less&引用fr om: leveldb :: WriteBatch :: WriteBatch()in Firebase(write_batch.o) leveldb :: WriteBatch :: WriteBatch()in Firebase(write_batch.o) leveldb :: SanitizeOptions (db_impl.o)中的std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&,leveldb :: InternalKeyComparator const *,leveldb :: InternalFilterPolicy const *,leveldb :: Options const&) $ b leveldb :: DBImpl :: DBImpl(leveldb :: Options const& ;,; std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&)in Firebase(db_impl.o) leveldb :: Firebase中的DBImpl ::〜DBImpl()(db_impl.o) Firebase(db_impl.o)中的leveldb :: DBImpl :: NewDB() leveldb :: DBImpl :: MaybeIgnoreError(leveldb :: Status *)const在Firebase(db_impl.o) ... vtable for _ cxxabiv1 :: _class_type_info,引用自: typeinfo for leveldb :: WriteBatch :: Handler in Firebase(write_batch.o) typeinfo for leveldb :: DB in Firebase(db_impl.o) typeinfo对于leveldb :: Firebase(db_impl.o)中的快照 leinfo中的类型信息:: Firebase中的比较器(comparator.o) leinfo中的类型信息:: Firebase中的缓存(cache.o) typeinfo for leveldb :: FilterPolicy in Firebase(filter_policy.o) typeinfo for leveldb :: Env in Firebase(env.o) ... 注意:缺少的vtable通常意味着第一个非内联虚拟成员函数没有定义。 vtable for _ cxxabiv1 :: _si_class_type_info,引用自: typeinfo for leveldb::(匿名命名空间):: Firebase中的MemTableInserter(write_batch.o)类型信息为leveldb :: DBImpl in Firebase(db_impl.o) typeinfo for leveldb :: DBImpl :: RecoverLogFile(无符号long long,leveldb :: VersionEdit *,unsigned long long *):: Firebase中的LogReporter(db_impl .o) typeinfo for leveldb :: Firebase中的SnapshotImpl(db_impl.o) leinfo中的typeinfo :: VersionSet :: Recover():: Firebase中的LogReporter(version_set.o) typeinfo对于firebase(version_set.o)中的leveldb :: Version :: LevelFileNumIterator 为leveldb的typeinfo::(匿名命名空间):: Firebase中的BytewiseComparatorImpl(comparator.o) ... 注意:缺少的vtable通常意味着第一个非内联虚拟成员函数没有定义。 Firebase(APLevelDB.o)中的操作员删除,引用来自: - [APLevelDB initWithPath:错误:]: - [APLevelDB setData:forKey:] Firebase(APLevelDB.o)中的 - [APLevelDB setString:forKey:] - Firebase(APLevelDB.o)中的[APLevelDB dataForKey:] - Firebase中的[APLevelDB stringForKey: .o) - Firebase(APLevelDB.o)中的[APLevelDB removeKey:] - Firebase(APLevelDB.o)中的[APLevelDB commitWriteBatch:] ... 运算符删除(void *),引用自: leveldb :: WriteBatch :: Handler ::〜Firebase(write_batch.o)中的Handler() leveldb :: :(匿名命名空间):: MemTableInserter :: 〜Firebase(write_batch.o)中的MemTableInserter() leveldb :: DBImpl :: DBImpl(leveldb :: Options const&; std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&)in Firebase(db_impl.o) leveldb :: DBImpl ::〜Firebase(db_impl.o)中的DBImpl() leveld Firebase(db_impl.o)中的b :: DBImpl ::〜DBImpl() Firebase(db_impl.o)中的DBImpl :: DeleteObsoleteFiles() leveldb :: DBImpl :: Recover(leveldb Firebase(db_impl.o)中的VersionEdit *) ... operator new [](unsigned long),引用来自: leveldb :: Status :: CopyState(char在firebase(status.o)中的$ * $ b leveldb :: Status :: Status(leveldb :: Status :: Code,leveldb :: Slice const&,leveldb :: Slice const&) )在Firebase(status.o)中的状态::状态(leveldb :: Status :: Code,leveldb :: Slice const&,leveldb :: Slice const&) leveldb :: VersionSet :: Firebase(version_set.o)中的MakeInputIterator(leveldb :: Compaction *)$: leveldb::(匿名命名空间):: HandleTable :: Resize()in Firebase(cache.o) leveldb :: LookupKey :: LookupKey(leveldb :: Slice const&; unsigned long long)in Firebase(dbformat.o) leveldb :: LookupKey :: LookupKey(leveldb :: Slice const& ;, u Firebase(dbformat.o) ... operator new(unsigned long),引用自: leveldb :: DBImpl :: DBImpl(leveldb :: Options (db_impl.o) leveldb :: DBImpl :: RecoverLogFile(无符号long long,leveldb :: VersionEdit *)const&,std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const& (db_impl.o) leveldb :: DBImpl :: Firebase(db_impl.o)中的BackgroundCompaction() leveldb :: DBImpl :: OpenCompactionOutputFile(leveldb :: DBImpl: :Firebase(db_impl.o)中的CompactionState *) leveldb :: DBImpl :: NewInternalIterator(leveldb :: ReadOptions const&; unsigned long long *)in Firebase(db_impl.o) leveldb :: DBImpl :: Firebase(db_impl.o)中的GetSnapshot()Firebase(db_impl.o)中的b $ b $ ,引用自: std :: 1 :: deque> :: __ add_back_capacity()in Firebase(d Firebase(env_posix.o)中的b_impl.o)::(匿名命名空间):: PosixEnv :: Schedule(void()(void ),void *)在Firebase(db_impl.o) leveldb :: DBImpl :: Recover(leveldb :: VersionEdit *)中引用来自: leveldb :: DBImpl :: DeleteObsoleteFiles()的 _cxa_call_unexpected Firebase(db_impl.o) leveldb :: DBImpl :: CleanupCompaction(leveldb :: DBImpl :: CompactionState *)in Firebase(db_impl.o) leveldb :: DestroyDB(std :: 1 :: base_string,std :: __ 1 :: allocator> const&,; leveldb :: Options const&)in Firebase(db_impl.o) void std :: _ 1 :: vector> :: void std :: _ 1 :: vector,std :: __ 1 :: allocator>>中的_push_back_slow_path(leveldb :: DBImpl :: CompactionState :: Output const& amp; amp; Firebase(db_impl.o) leveldb :: VersionEdit ::〜Firebase(db_impl.o)中的VersionEdit()$ b中的:: push_back_slow_path const(std :: __ 1 :: pair const&) $ b ... _cxa_end_catch,引用自: std :: 1 :: deque> :: __ add_back_capacity()in Firebase(db_impl.o) leveldb :: :(匿名命名空间):: PosixEnv ::在Firebase(env_posix.o) _cxa_pure_virtual中的Schedule(void()(void ),void *),引用自: leveldb的vtable在Firebase(write_batch.o)中的WriteBatch :: Handler Firebase(db_impl.o)中的leveldb :: DB的vtable for vtable for 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) ... _cxa_rethrow,引用自: std :: _ 1 :: deque> ::在firebase(db_impl.o)中的_add_back_capacity() leveldb :: :(匿名命名空间):: PosixEnv :: Schedule(void()(void ), Firebase(env_posix.o)中的void *) _gxx_personality_v0引用自: Firebase(APLevelDB.o)中的矮化异常展开信息(__eh_frame) Dwarf异常展开Firebase中的Info(__eh_frame)(write_batch.o) Firebase(b_impl.o)中的矮化异常展开信息(__eh_frame) Firebase(status.o)中的矮化异常展开信息(__eh_frame) Firebase中的矮人异常展开信息(__eh_frame)(builder.o) Firebase中的矮化异常展开信息(__eh_frame)(version_set.o) Firebase中的矮化异常展开信息(__eh_frame)(table_cache.o ) ... leveldb :: WriteBatch :: WriteBatch()in Firebase(write_batch.o) leveldb :: WriteBatch :: WriteBatch()in FireBase(write_batch.o) Firebase(APLevelDB.o)中的矮人异常展开信息(__eh_frame) Firebase中的矮人异常展开信息(__eh_frame)(write_batch.o) Dwarf异常Unwi Firebase(db_impl.o)中的Info(__eh_frame) Firebase(status.o)中的Dwarf异常展开信息(__eh_frame) Firebase(builder.o)中的Dwarf异常展开信息(__eh_frame)矮人异常展开Firebase(version_set.o)中的信息(__eh_frame) Firebase(table_cache.o)中的矮化异常展开信息(__eh_frame) ... leveldb :: SanitizeOptions( Firebase(db_impl.o)中的std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&,leveldb :: InternalKeyComparator const *,leveldb :: InternalFilterPolicy const *,leveldb :: Options const&)$ b $ Firebase(db_impl.o)中的leveldb :: DBImpl :: DBImpl(leveldb :: Options const&; std :: __ 1 :: basic_string,std :: __ 1 :: allocator> const&) leveldb :: DBImpl Firebase(db_impl.o)中的〜〜DBImpl() ... ld:找不到架构i386的元件符号 clang:error:连接器命令失败,退出代码1 (使用-v来查看调用) 对不起。我们今天推出了一个新版本,增加了对libc ++的一个新的依赖关系。dylib如果你添加了它,它应该会生成。 请注意,当前版本也存在一个问题防止为arm64建设。鉴于此,您可能只想使用以前的版本: https:// cdn.firebase.com/ObjC/Firebase.framework-1.0.9.zip 等一天左右,我们会得到最新的版本理顺了。 不便之处! I've been trying to add the firebase framework to my ios app. I was following the instructions here: https://www.firebase.com/docs/ios-quickstart.html. 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.libicucore.dylibCFNetwork.frameworkSecurity.frameworkSystemConfiguration.frameworkIs there some other framework I'm missing that wasn't listed? I have no idea what's going on. Thanks for the help!Edit: Here are the errors Undefined symbols for architecture i386: "std::1::basic_string, std::__1::allocator >::compare(char const*) const", referenced from: leveldb::VersionSet::Recover() in Firebase(version_set.o) "std::_1::_vector_base_common::__throw_length_error() const", referenced from: void std::_1::vector >::_push_back_slow_path(leveldb::Iterator* const&) in Firebase(db_impl.o) void std::_1::vector >::_push_back_slow_path(leveldb::DBImpl::CompactionState::Output const&) in Firebase(db_impl.o) void std::_1::vector >::_push_back_slow_path(unsigned long long const&) in Firebase(db_impl.o) void std::_1::vector, std::__1::allocator > >::_push_back_slow_path const>(std::__1::pair const&) in Firebase(db_impl.o) std::__1::enable_if<__is_forward_iterator >::value, std::_1::_wrap_iter >::type std::_1::vector >::insert >(std::_1::__wrap_iter, std::_1::_wrap_iter, std::_1::_wrap_iter) in Firebase(version_set.o) std::_1::vector >::_append(unsigned long) in Firebase(version_set.o) std::__1::enable_if<__is_forward_iterator::value, void>::type std::__1::vector >::assign(leveldb::FileMetaData*, leveldb::FileMetaData*) 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&, 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&, leveldb::Options const&) in Firebase(db_impl.o) leveldb::VersionSet::Recover() in Firebase(version_set.o) leveldb::MakeFileName(std::__1::basic_string, std::__1::allocator > const&, unsigned long long, char const*) in Firebase(filename.o) leveldb::DescriptorFileName(std::__1::basic_string, std::__1::allocator > const&, unsigned long long) in Firebase(filename.o) leveldb::CurrentFileName(std::__1::basic_string, std::__1::allocator > const&) in Firebase(filename.o) leveldb::LockFileName(std::__1::basic_string, std::__1::allocator > const&) in Firebase(filename.o) ... "std::__1::basic_string, std::__1::allocator >::append(char const*)", referenced from: leveldb::DBImpl::GetProperty(leveldb::Slice const&, 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&) 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&, leveldb::Options const&) 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&, 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&, 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&) 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&, leveldb::Env*, leveldb::Options const&, leveldb::TableCache*, leveldb::Iterator*, leveldb::FileMetaData*) in Firebase(builder.o) leveldb::SaveValue(void*, leveldb::Slice const&, leveldb::Slice const&) in Firebase(version_set.o) leveldb::VersionSet::WriteSnapshot(leveldb::log::Writer*) in Firebase(version_set.o) leveldb::VersionEdit::DecodeFrom(leveldb::Slice const&) in Firebase(version_edit.o) leveldb::TableBuilder::Add(leveldb::Slice const&, leveldb::Slice const&) 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&) 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&, leveldb::Slice const&) in Firebase(block_builder.o) ... "std::__1::basic_string, std::__1::allocator >::push_back(char)", referenced from: leveldb::WriteBatch::Put(leveldb::Slice const&, leveldb::Slice const&) in Firebase(write_batch.o) leveldb::WriteBatch::Delete(leveldb::Slice const&) 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&) in Firebase(logging.o) leveldb::EscapeString(leveldb::Slice const&) 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&)", referenced from: leveldb::DBImpl::DBImpl(leveldb::Options const&, std::__1::basic_string, std::__1::allocator > const&) 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&, leveldb::InternalKey const&) in Firebase(db_impl.o) void std::_1::vector >::_push_back_slow_path(leveldb::DBImpl::CompactionState::Output const&) in Firebase(db_impl.o) void std::_1::vector, std::__1::allocator > >::_push_back_slow_path const>(std::__1::pair const&) in Firebase(db_impl.o) std::_1::vector, std::__1::allocator > >::_swap_out_circular_buffer(std::_1::_split_buffer, std::__1::allocator >&>&) 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&)", 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&, 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&, leveldb::InternalKey const&) 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::_1::_sort&, unsigned long long*>(unsigned long long*, unsigned long long*, std::_1::_less&)", 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&, leveldb::InternalKeyComparator const*, leveldb::InternalFilterPolicy const*, leveldb::Options const&) in Firebase(db_impl.o) leveldb::DBImpl::DBImpl(leveldb::Options const&, std::__1::basic_string, std::__1::allocator > const&) 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 _cxxabiv1::_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 _cxxabiv1::_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&, std::__1::basic_string, std::__1::allocator > const&) 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&, leveldb::Slice const&) in Firebase(status.o) leveldb::Status::Status(leveldb::Status::Code, leveldb::Slice const&, leveldb::Slice const&) 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&, unsigned long long) in Firebase(dbformat.o) leveldb::LookupKey::LookupKey(leveldb::Slice const&, unsigned long long) in Firebase(dbformat.o) ... "operator new(unsigned long)", referenced from: leveldb::DBImpl::DBImpl(leveldb::Options const&, std::__1::basic_string, std::__1::allocator > const&) 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&, 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) ... "_cxa_begin_catch", referenced from: std::1::deque >::__add_back_capacity() in Firebase(db_impl.o) leveldb::(anonymous namespace)::PosixEnv::Schedule(void ()(void), void*) in Firebase(env_posix.o) "_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::1::basic_string, std::__1::allocator > const&, leveldb::Options const&) in Firebase(db_impl.o) void std::_1::vector >::_push_back_slow_path(leveldb::DBImpl::CompactionState::Output const&) in Firebase(db_impl.o) void std::_1::vector, std::__1::allocator > >::_push_back_slow_path const>(std::__1::pair const&) in Firebase(db_impl.o) leveldb::VersionEdit::~VersionEdit() in Firebase(db_impl.o) ... "_cxa_end_catch", referenced from: std::1::deque >::__add_back_capacity() in Firebase(db_impl.o) leveldb::(anonymous namespace)::PosixEnv::Schedule(void ()(void), void*) in Firebase(env_posix.o) "_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) ... "_cxa_rethrow", referenced from: std::_1::deque >::_add_back_capacity() in Firebase(db_impl.o) leveldb::(anonymous namespace)::PosixEnv::Schedule(void ()(void), void*) in Firebase(env_posix.o) "_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&, leveldb::InternalKeyComparator const*, leveldb::InternalFilterPolicy const*, leveldb::Options const&) in Firebase(db_impl.o) leveldb::DBImpl::DBImpl(leveldb::Options const&, std::__1::basic_string, std::__1::allocator > const&) 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) 解决方案 Sorry. We pushed a new version today that added a new dependency on libc++.dylib If you add that, it should build.Note that there's also an issue with the current build that prevents building for arm64. Given that, you may want to just use the previous build: https://cdn.firebase.com/ObjC/Firebase.framework-1.0.9.zipElse wait a day or so and we'll get the latest build straightened out.Sorry for the inconvenience! 这篇关于向ios项目添加firebase框架时的链接器错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!