我使用Unity 4.6.6构建了我的Xcode项目,并且我一直遇到IL2CPP问题。我在构建时选择了Player设置中的通用架构(包括armv7和arm64),并且在生成的Xcode项目中,在构建时遇到以下Mach-O Linker错误。
架构armv7的未定义符号: " _sqlite3_bind_int",引自: - libSmacTracking.a中的[SmacBaseDao setSqlBindStatement:entity:colmunInfoList:emptyIsNull:](SmacBaseDao.o) " _sqlite3_errmsg",引自: - [SmacBaseDao execSelectQuery:condition:colmun:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:](SmacBaseDao.o) - [SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getColmunsInfo:transactionDbObj:](SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getTableList](SmacBaseDao.o) " _sqlite3_column_int",引自: - libSmacTracking.a中的[SmacBaseDao getNumber:column:](SmacBaseDao.o) " _sqlite3_open",引自: - libSmacTracking.a中的[SmacBaseDao dbOpen](SmacBaseDao.o) " _sqlite3_exec",引自: - libSmacTracking.a中的[SmacBaseDao dbOpen](SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao dbClose:](SmacBaseDao.o) " _OBJC_CLASS _ $ _ NSManagedObjectModel",引自: libGoogleAnalyticsServices.a中的objc-class-ref(GAICoreDataUtil.o) " _sqlite3_prepare_v2",引自: - libSmacTracking.a中的[SmacUpdate updateDB](SmacUpdate.o) - libSmacTracking.a中的[SmacBaseDao dbOpen](SmacBaseDao.o) - [SmacBaseDao execSelectQuery:condition:colmun:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:](SmacBaseDao.o) - [SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getColmunsInfo:transactionDbObj:](SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getTableList](SmacBaseDao.o) ... " _sqlite3_step",引自: - libSmacTracking.a中的[SmacUpdate updateDB](SmacUpdate.o) - libSmacTracking.a中的[SmacBaseDao dbOpen](SmacBaseDao.o) - [SmacBaseDao execSelectQuery:condition:colmun:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:](SmacBaseDao.o) - [SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getColmunsInfo:transactionDbObj:](SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getTableList](SmacBaseDao.o) ... " _sqlite3_column_text",引自: - libSmacTracking.a中的[SmacBaseDao getString:column:](SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getDateString:column:](SmacBaseDao.o) " _sqlite3_finalize",引自: - libSmacTracking.a中的[SmacUpdate updateDB](SmacUpdate.o) - libSmacTracking.a中的[SmacBaseDao dbOpen](SmacBaseDao.o) - [SmacBaseDao execSelectQuery:condition:colmun:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:](SmacBaseDao.o) - [SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) - libSmacTracking.a中的[SmacBaseDao getColmunsInfo:transactionDbObj:](SmacBaseDao.o) " _OBJC_CLASS _ $ _ NSEntityDescription",引自: libGoogleAnalyticsServices.a中的objc-class-ref(GAIDataStore.o) libGoogleAnalyticsServices.a中的objc-class-ref(GAICoreDataUtil.o) " _OBJC_CLASS _ $ _ NSManagedObjectContext",引自: libGoogleAnalyticsServices.a中的objc-class-ref(GAIDataStore.o) " _OBJC_CLASS _ $ _ NSPersistentStoreCoordinator",引自: libGoogleAnalyticsServices.a中的objc-class-ref(GAIDataStore.o) " _kSecReturnData",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper secItemFormatToDictionary:] KeychainUtils.o中的+ [KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] " _kSecMatchLimitOne",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] " _kSecMatchLimit",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] " _OBJC_CLASS _ $ _ NSFetchRequest",引自: libGoogleAnalyticsServices.a中的objc-class-ref(GAIDataStore.o) " _NSOverwriteMergePolicy",引自: - libGoogleAnalyticsServices.a中的[GAIDataStore contextWithModel:URL:](GAIDataStore.o) " _sqlite3_reset",引自: - libSmacTracking.a中的[SmacBaseDao execInsertQuery:transactionDbObj:isTmp:](SmacBaseDao.o) - [SmacBaseDao execUpdateQuery:condition:emptyIsNull:transactionDbObj:isTmp:] in libSmacTracking.a(SmacBaseDao.o) " _kSecClassGenericPassword",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] - KeychainItemWrapper.o中的[KeychainItemWrapper dictionaryToSecItemFormat:] - KeychainItemWrapper.o中的[KeychainItemWrapper secItemFormatToDictionary:] KeychainUtils.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:] " _OBJC_CLASS _ $ _ NSAttributeDescription",引自: libGoogleAnalyticsServices.a中的objc-class-ref(GAICoreDataUtil.o) " _kSecAttrService",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] KeychainUtils.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:] " _kSecAttrLabel",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper resetKeychainItem] + KeychainUtils.o中的[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] " _NSSQLiteStoreType",引自: - libGoogleAnalyticsServices.a中的[GAIDataStore coordinatorWithModel:URL:](GAIDataStore.o) " _NSSQLiteErrorDomain",引自: - 在libGoogleAnalyticsServices.a中使用[GAIDataStore performBlockAndWait:withError:](GAIDataStore.o) " _sqlite3_bind_null",引自: - libSmacTracking.a中的[SmacBaseDao setSqlBindStatement:entity:colmunInfoList:emptyIsNull:](SmacBaseDao.o) " _kSecClass",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] - KeychainItemWrapper.o中的[KeychainItemWrapper dictionaryToSecItemFormat:] - KeychainItemWrapper.o中的[KeychainItemWrapper secItemFormatToDictionary:] - KeychainItemWrapper.o中的[KeychainItemWrapper writeToKeychain] KeychainUtils.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:] ... " _kSecAttrGeneric",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] " _kSecAttrAccount",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] KeychainUtils.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:] " _kSecValueData",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper resetKeychainItem] - KeychainItemWrapper.o中的[KeychainItemWrapper dictionaryToSecItemFormat:] - KeychainItemWrapper.o中的[KeychainItemWrapper secItemFormatToDictionary:] + KeychainUtils.o中的[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] " _kSecAttrAccessGroup",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] KeychainUtils.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:] " _SecItemUpdate",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper writeToKeychain] + KeychainUtils.o中的[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] " _OBJC_CLASS _ $ _ SKProductsRequest",引自: AppStoreProcess.o中的objc-class-ref " _sqlite3_bind_text",引自: - libSmacTracking.a中的[SmacBaseDao setSqlBindStatement:entity:colmunInfoList:emptyIsNull:](SmacBaseDao.o) " _SecItemCopyMatching",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] - KeychainItemWrapper.o中的[KeychainItemWrapper secItemFormatToDictionary:] - KeychainItemWrapper.o中的[KeychainItemWrapper writeToKeychain] KeychainUtils.o中的+ [KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] " _sqlite3_close",引自: - libSmacTracking.a中的[SmacBaseDao dbClose:](SmacBaseDao.o) " _SecItemAdd",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper writeToKeychain] + KeychainUtils.o中的[KeychainUtils setValue:key:servicename:accessGroup:force:errorDomain:error:] " _SecItemDelete",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper resetKeychainItem] KeychainUtils.o中的+ [KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] " _OBJC_CLASS _ $ _ SKPayment",引自: AppStoreProcess.o中的objc-class-ref " _kSecReturnAttributes",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper initWithIdentifier:serviceName:accessGroup:] KeychainUtils.o中的+ [KeychainUtils getStoredValue:serviceName:accessGroup:errorDomain:error:] KeychainUtils.o中的+ [KeychainUtils deleteValue:serviceName:accessGroup:errorDomain:error:] " _kSecAttrDescription",引自: - KeychainItemWrapper.o中的[KeychainItemWrapper resetKeychainItem] " _OBJC_CLASS _ $ _ SKPaymentQueue",引自: AppStoreProcess.o中的objc-class-ref ld:找不到架构armv7的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我已经阅读了一些关于"未定义的架构armv7符号和#34;的答案的问题。与this one类似,但顶部答案中建议的解决方案并不适用,因为在我的情况下,它将所需文件放入Xcode Project文件夹中。此外,在检查时,错误所寻找的库已在Build Phases的 Link Binary With Libraries 部分中正确添加。
如果我做错了什么,有人可以帮助或启发我吗?
我还尝试在Unity播放器设置中选择armv7或只用arm64来构建IL2CPP,但我仍然得到#34;未定义的符号用于armv7"或" arm64"的未定义符号; Mach-O Linker分别在Xcode中出错。
使用的软件: Unity 4.6.6,Xcode 6.1(将尝试升级到6.3)和iOS 8.1基础SDK
答案 0 :(得分:0)
查看是否已将libsqlite3.dylib添加到所有目标。