我已经成功使用 AWS SDK 框架获得了一个应用程序,现在我正在尝试将一个静态库作为自制框架导入,并与我的其他几个项目共享代码。
问题是:为了导入我的静态库,我需要添加-ObjC
链接器标志以导入库,但是每当我添加该链接器标志时,AWS都会吓坏并给我 40 多个红色编译错误。
我对链接器标志和库导入完全陌生,所以我真的不知道从哪里开始。我做了一些研究,但我能找到的最好的线索是我可以使用的建议,-force_load
而不是-ObjC
,但这似乎需要在 Build Phases 部分手动添加每个“.m”文件,而我的库包含数百个这样的文件文件。
这个问题有没有比添加每个文件更简单的解决方案以便我可以使用-force_load
?我怎样才能让 AWK SDK 和导入我的库的需求一起很好地发挥作用?
编辑:根据评论中的建议,这是我添加-ObjC
链接器标志时遇到的错误。如果没有该标志(并且没有添加静态库),应用程序将使用AWSiOSSDKv2
框架成功编译。但是添加该链接器标志(据我了解,静态库需要它,但甚至在添加该库之前)会立即导致:
[删除代码以适应字符限制]
编辑 2:根据 Yosuke Matsuda 的回答,我添加了libsqlite3.dylib
,我错过了。现在以前的错误已经消失了,但是我有几十个(几百个?)“重复符号”行,以一个红色的“链接器命令失败,退出代码 1”错误结束。(我会把它们都包括在内,但有趣的是,他们把我的帖子放在了 73,111 个字符上,远远超过了 30,000 个字符的限制。)
有趣的是,它们似乎是由于框架本身的要求引起的冲突(例如,AWSCore
在 AWS Framework 中需要Bolts
框架,但它们似乎与一堆重复的符号冲突?)。
而且,和以前一样,只需-ObjC
从链接器标志中删除即可让应用程序正常编译并成功。
duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods_Reachability in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Pods-Reachability-dummy.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Pods-Reachability-dummy.o)
duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods_Reachability in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Pods-Reachability-dummy.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Pods-Reachability-dummy.o)
duplicate symbol _OBJC_IVAR_$_Reachability.reachabilityRef in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_IVAR_$_Reachability.reachableOnWWAN in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _kReachabilityChangedNotification in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_IVAR_$_Reachability.reachabilitySerialQueue in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_IVAR_$_Reachability.reachableBlock in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_IVAR_$_Reachability.unreachableBlock in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_IVAR_$_Reachability.reachabilityObject in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_CLASS_$_Reachability in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_METACLASS_$_Reachability in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Reachability.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/Reachability.framework/Reachability(Reachability.o)
duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods_XMLDictionary in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Pods-XMLDictionary-dummy.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(Pods-XMLDictionary-dummy.o)
duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods_XMLDictionary in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(Pods-XMLDictionary-dummy.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(Pods-XMLDictionary-dummy.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._collapseTextNodes in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._stripEmptyNodes in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._trimWhiteSpace in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._alwaysUseArrays in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._preserveComments in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._wrapRootNode in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._attributesMode in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._nodeNameMode in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._root in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._stack in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_XMLDictionaryParser._text in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_CLASS_$_XMLDictionaryParser in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_METACLASS_$_XMLDictionaryParser in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(XMLDictionary.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/XMLDictionary.framework/XMLDictionary(XMLDictionary.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._databasePath in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._openResultSets in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._db in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._logsErrors in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._crashOnErrors in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._maxBusyRetryTimeInterval in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._startBusyRetryTime in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._cachedStatements in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._dateFormat in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._isExecutingStatement in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._traceExecution in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._shouldCacheStatements in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _FMDBExecuteBulkSQLCallback in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._inTransaction in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _FMDBBlockSQLiteCallBackFunction in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._openFunctions in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabase._checkedOut in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMStatement._statement in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMStatement._inUse in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMStatement._useCount in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMStatement._query in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_CLASS_$_FMDatabase in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_METACLASS_$_FMDatabase in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_CLASS_$_FMStatement in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_METACLASS_$_FMStatement in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabase.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabase.o)
duplicate symbol _OBJC_IVAR_$_FMDatabasePool._path in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
duplicate symbol _OBJC_IVAR_$_FMDatabasePool._lockQueue in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
duplicate symbol _OBJC_IVAR_$_FMDatabasePool._databaseInPool in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
duplicate symbol _OBJC_IVAR_$_FMDatabasePool._databaseOutPool in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
duplicate symbol _OBJC_IVAR_$_FMDatabasePool._openFlags in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
duplicate symbol _OBJC_IVAR_$_FMDatabasePool._delegate in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
duplicate symbol _OBJC_IVAR_$_FMDatabasePool._maximumNumberOfDatabasesToCreate in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
duplicate symbol _OBJC_CLASS_$_FMDatabasePool in:
/Users/kornferry/Documents/Repositories/kf4ddemo/AWSiOSSDKv2.framework/AWSiOSSDKv2(FMDatabasePool.o)
/Users/kornferry/Documents/Repositories/kf4ddemo/FMDB.framework/FMDB(FMDatabasePool.o)
[And on and on and on, ending with...]
ld: 260 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)