0

我一直在使用 Unity 4.6.6 构建我的 Xcode 项目,并且在使用 IL2CPP 时遇到了问题。我在构建时在 Player 设置中选择通用架构(包括 armv7 和 arm64),在它生成的 Xcode 项目中,在构建时我遇到以下 Mach-O 链接器错误。

架构 armv7 的未定义符号:“_sqlite3_bind_int”,引用自:-[SmacBaseDao setSqlBindStatement:entity:colmunInfoList:emptyIsNull:] in libSmacTracking.a(SmacBaseDao.o) “_sqlite3_errmsg”,引用自:-[SmacBaseDao execSelectQuery:condition:colmun: libSmacTracking.a(SmacBaseDao.o) 中的 transactionDbObj:isTmp:] - libSmacTracking.a(SmacBaseDao.o) 中的 [SmacBaseDao execInsertQuery:transactionDbObj:isTmp:] - libSmacTracking 中的 [SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:]。 a(SmacBaseDao.o) -[SmacBaseDao getColmunsInfo:transactionDbObj:] in libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao getTableList] in libSmacTracking.a(SmacBaseDao.o) "_sqlite3_column_int",引用自:-[SmacBaseDao getNumber:column :] 在 libSmacTracking.a(SmacBaseDao.o) "_sqlite3_open" 中,引用自:-[SmacBaseDao dbOpen] 在 libSmacTracking.a(SmacBaseDao.o) "_sqlite3_exec",引用自:-[SmacBaseDao dbOpen] 在 libSmacTracking.a(SmacBaseDao. o) -[SmacBaseDao dbClos​​e:] 在 libSmacTracking.a(SmacBaseDao.o) "_OBJC_CLASS_$_NSManagedObjectModel" 中,引用自:libGoogleAnalyticsServices.a(GAICoreDataUtil.o) "_sqlite3_prepare_v2" 中的 objc-class-ref,引用自:-[SmacUpdate updateDB] 在 libSmacTracking.a(SmacUpdate.o) -[SmacBaseDao dbOpen] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao execSelectQuery:condition:colmun:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) -[ SmacBaseDao execInsertQuery:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao getColmunsInfo:transactionDbObj:] 在 libSmacTracking.a(SmacBaseDao.o) -libSmacTracking.a(SmacBaseDao.o) 中的[SmacBaseDao getTableList] ... "_sqlite3_step",引用自:libSmacTracking.a(SmacUpdate.o) 中的-[SmacUpdate updateDB] -libSmacTracking.a(SmacBaseDao.o) 中的[SmacBaseDao dbOpen] o) -[SmacBaseDao execSelectQuery:condition:colmun:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao execUpdateQuery:condition :emptyIsNull:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao getColmunsInfo:transactionDbObj:] in libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao getTableList] in libSmacTracking.a(SmacBaseDao.o) ... "_sqlite3_column_text",引用自:-[SmacBaseDao getString:column: ] in libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao getDateString:column:] in libSmacTracking.a(SmacBaseDao.o) "_sqlite3_finalize",引用自:-[SmacUpdate updateDB] in libSmacTracking.a(SmacUpdate.o) -[ SmacBaseDao dbOpen] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao execSelectQuery:condition:colmun:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:] 在 libSmacTracking.a( SmacBaseDao.o) -[SmacBaseDao execUpdateQuery:condition:emptyIsNull:libSmacTracking.a(SmacBaseDao.o) 中的 transactionDbObj:isTmp:] -libSmacTracking.a(SmacBaseDao.o) 中的 [SmacBaseDao getColmunsInfo:transactionDbObj:] "_OBJC_CLASS_$_NSEntityDescription",引用自:libGoogleAnalyticsServices.a( GAIDataStore.o) objc-class-ref in libGoogleAnalyticsServices.a(GAICoreDataUtil.o) "_OBJC_CLASS_$_NSManagedObjectContext",引用自:objc-class-ref in libGoogleAnalyticsServices.a(GAIDataStore.o) "_OBJC_CLASS_$_NSPersistentStoreCoordinator",引用自: libGoogleAnalyticsServices.a(GAIDataStore.o) "_kSecReturnData" 中的 objc-class-ref,引用自:KeychainItemWrapper.o 中的 -[KeychainItemWrapper secItemFormatToDictionary:] +[KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] in KeychainUtils.o "_kSecMatchLimitOne",引用自:-[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] in KeychainItemWrapper.o "_kSecMatchLimit",引用自:-[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] in KeychainItemWrapper。 o “_OBJC_CLASS_$_NSFetchRequest”,引用自:libGoogleAnalyticsServices.a(GAIDataStore.o) 中的 objc-class-ref,“_NSOverwriteMergePolicy”,引用自:libGoogleAnalyticsServices.a(GAIDataStore.o) 中的 -[GAIDataStore contextWithModel:URL:] “_sqlite3_reset ",引用自:-[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) -[SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:] 在 libSmacTracking.a(SmacBaseDao.o) "_kSecClassGenericPassword" 中,引用自: -[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] 在 KeychainItemWrapper.o -[KeychainItemWrapper dictionaryToSecItemFormat:] 在 KeychainItemWrapper.o -[KeychainItemWrapper secItemFormatToDictionary:] 在 KeychainItemWrapper。 o +[KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o +[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] 在 KeychainUtils.o +[KeychainUtils deleteValue:serviceName:accessGroup: keychainUtils.o "_OBJC_CLASS_$_NSAttributeDescription" 中的 errorDomain:error:],引用自:libGoogleAnalyticsServices.a(GAICoreDataUtil.o) "_kSecAttrService" 中的 objc-class-ref,引用自: -[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] 在 KeychainItemWrapper.o +[KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o +[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:错误:] 在 KeychainUtils.o +[KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o "_kSecAttrLabel",引用自: -[KeychainItemWrapper resetKeychainItem] 在 KeychainItemWrapper.o +[KeychainUtils setValue:key:servicename: KeychainUtils.o "_NSSQLiteStoreType" 中的 accessGroup:force:errorDomain:error:],引用自:-[GAIDataStore coordinatorWithModel:URL:] in libGoogleAnalyticsServices.a(GAIDataStore.o) "_NSSQLiteErrorDomain",引用自:- [GAIDataStore performBlockAndWait:withError:] 在 libGoogleAnalyticsServices.a(GAIDataStore.o) "_sqlite3_bind_null" 中,引用自: -[SmacBaseDao setSqlBindStatement:entity:colmunInfoList:emptyIsNull:] 在 libSmacTracking.a(SmacBaseDao.o) "_kSecClass" 中,引用来自: -[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] 在 KeychainItemWrapper.o -[KeychainItemWrapper dictionaryToSecItemFormat:] 在 KeychainItemWrapper.o -[KeychainItemWrapper secItemFormatToDictionary:] 在 KeychainItemWrapper.o -[KeychainItemWrapper writeToKeychain] 在 KeychainItemWrapper.o +[KeychainUtils getStoredValue: KeychainUtils.o 中的 serviceName:accessGroup:errorDomain:error:] +KeychainUtils 中的 [KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:]。o +[KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] in KeychainUtils.o ... "_kSecAttrGeneric",引用自:-[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] in KeychainItemWrapper.o "_kSecAttrAccount",引用自: -[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] 在 KeychainItemWrapper.o +[KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o +[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:]在 KeychainUtils.o +[KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o "_kSecValueData",引用自: -[KeychainItemWrapper resetKeychainItem] 在 KeychainItemWrapper。o -[KeychainItemWrapper dictionaryToSecItemFormat:] in KeychainItemWrapper.o -[KeychainItemWrapper secItemFormatToDictionary:] 在 KeychainItemWrapper.o +[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] in KeychainUtils.o "_kSecAttrAccessGroup",引用自: -[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] 在 KeychainItemWrapper.o +[KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o +[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:]在 KeychainUtils.o +[KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o "_SecItemUpdate",引用自: -[KeychainItemWrapper writeToKeychain] 在 KeychainItemWrapper。o +[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] in KeychainUtils.o "_OBJC_CLASS_$_SKProductsRequest",引用自:AppStoreProcess.o "_sqlite3_bind_text" 中的objc-class-ref,引用自:-[ SmacBaseDao setSqlBindStatement:entity:colmunInfoList:emptyIsNull:] in libSmacTracking.a(SmacBaseDao.o) "_SecItemCopyMatching",引用自: -[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] in KeychainItemWrapper.o -[KeychainItemWrapper secItemFormatToDictionary:] in KeychainItemWrapper.o -KeychainItemWrapper.o 中的[KeychainItemWrapper writeToKeychain] +KeychainUtils.o "_sqlite3_close" 中的[KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:],引用自:-[SmacBaseDao dbClos​​e:] in libSmacTracking.a(SmacBaseDao.o) "_SecItemAdd",引用自: -[KeychainItemWrapper writeToKeychain] in KeychainItemWrapper.o +[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] in KeychainUtils.o "_SecItemDelete",引用自:-[KeychainItemWrapper resetKeychainItem] in KeychainItemWrapper.o +[KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] in KeychainUtils.o "_OBJC_CLASS_$_SKPayment",引用自:objc-class- AppStoreProcess.o "_kSecReturnAttributes" 中的引用,引用自: -[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] 在 KeychainItemWrapper.o +[KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o +[KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] 在 KeychainUtils.o "_kSecAttrDescription",引用自:-[KeychainItemWrapper resetKeychainItem] in KeychainItemWrapper.o "_OBJC_CLASS_$_SKPaymentQueue",引用自:objc- AppStoreProcess.o ld 中的 class-ref:未找到架构 armv7 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)未找到架构 armv7 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)未找到架构 armv7 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我已经阅读了一些关于“架构 armv7 的未定义符号”的问题,例如这个问题,但最佳答案中建议的解决方案并不真正适用,因为在我的情况下,Unity 将所需的文件放入 Xcode 项目文件夹中。此外,在检查库时,错误正在寻找的库已正确添加到构建阶段的链接二进制与库部分中。

如果我做错了什么,谁能帮助或启发我?

我还尝试在 Unity Player 设置中选择仅 armv7 或仅 arm64 以使用 IL2CPP 构建,但我仍然在 Xcode 中分别收到“armv7 的未定义符号”或“arm64 的未定义符号”Mach-O 链接器错误。

使用的软件: Unity 4.6.6、Xcode 6.1(将尝试升级到6.3)和iOS 8.1 base SDK

4

1 回答 1

0

查看是否将 libsqlite3.dylib 添加到所有目标中。

于 2015-07-16T10:05:38.393 回答