【问题标题】:Linker error when compiling iOS 5 app for Simulator - Undefined symbols: _objc_assign_global, _objc_assign_ivar, and _objc_assign_strongCast为模拟器编译 iOS 5 应用程序时出现链接器错误 - 未定义符号:_objc_assign_global、_objc_assign_ivar 和 _objc_assign_strongCast
【发布时间】:2026-02-17 21:25:02
【问题描述】:
升级到自动引用计数后,我的项目不再针对 iOS 5.0 模拟器进行编译。它仍然可以为任何 iOS 设备完美编译。
此外,在升级到 iOS 5 之后,但在升级到自动引用计数之前,我的项目可以在设备和模拟器上完美编译。
链接器说它找不到以下符号:
- _objc_assign_global
- _objc_assign_ivar
- _objc_assign_strongCast
一开始我以为我可能缺少一个模拟器特定的框架,但在添加了每个可用的框架后,我仍然得到相同的错误。
其他信息
- iOS 部署目标是:4.0。
- 操作系统是 Snow Leopard OSX 10.6.8 64bit
架构 i386 的未定义符号:
“_objc_assign_global”,引用自:
+[InAppPurchaseManager sharedInAppPurchaseManager] InAppPurchaseManager.o
+[ThemeManager sharedThemeManager] 在 ThemeManager.o
+[DownloadUpdatesManager sharedDownloadUpdatesManager] 在 DownloadUpdatesManager.o
+[AudioManager sharedAudioManager] 在 AudioManager.o
+[IOHelper sharedIOHelper] 在 IOHelper.o
-[CKBezierPath svgStringPath] 在 CKBezierPath.o
+[PreferencesManager defaultLineWidth] 在 PreferencesManager.o
...
“_objc_assign_ivar”,引用自:
-InAppPurchaseManager.o 中的[InAppPurchaseManager 初始化]
-[InAppPurchaseManager addTransactionObserver:] InAppPurchaseManager.o
-[InAppPurchaseManager removePurchaseTransactionObserver:] InAppPurchaseManager.o
- [InAppPurchaseManager purchaseProduct:forThemeIDType:] InAppPurchaseManager.o
-[InAppPurchaseManager productsRequest:didReceiveResponse:] InAppPurchaseManager.o
- ThemeEditVC.o 中的[ThemeEditVC viewDidLoad]
-[ThemeEditVC setDelegate:] 在 ThemeEditVC.o
...
“_objc_assign_strongCast”,引用自:
+[SFHFKeychainUtils getPasswordForUsername:andServiceName:error:] in SFHFKeychainUtils.o
+[SFHFKeychainUtils storeUsername:andPassword:forServiceName:updateExisting:error:] 在 SFHFKeychainUtils.o
+[SFHFKeychainUtils deleteItemForUsername:andServiceName:error:] in SFHFKeychainUtils.o
Utility.o 中的 __replacePlaceholdersWithValues
- [LocationManager checkForNewLocation:] 在 LocationManager.o
-LocationManager.o 中的 [LocationManager getNewLocationInStringFormat]
___52-[LocationManager getNewLocationInStringFormat]_block_invoke_0 在 LocationManager.o
...
ld: 未找到架构 i386 的符号
编辑:
Objective-C 垃圾收集设置为“支持”而不是“必需”。将其设置为“必需”后,出现错误:
ld:/Users/teacher/drawingapp/FlurryLib/libFlurryAnalytics.a(FlurryAnalytics.o) 使用不兼容的垃圾收集设置构建,以与架构 i386 的先前 .o 文件链接
命令 /Developer_4_2_ios5/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang 失败,退出代码为 1
删除 Flurry 库后,之前的错误信息又开始出现了。
编辑 2:
看起来垃圾收集只支持 OS X 而不是 iOS。我仍然不明白为什么它允许我在打开垃圾收集的设备上编译和运行应用程序,而不是在模拟器上。
无论如何,我刚刚将垃圾收集设置为“不支持”,但现在它将不再在设备上编译和运行。
我现在收到此错误:
/Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m
1. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:52:1: 当前解析器令牌'-'
2. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:1: LLVM IR 生成声明'PurchaseThemeOptionVC::viewDidLoad'
3. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:21: LLVM IR 生成复合语句('{}')
clang:错误:无法执行命令:分段错误
clang:错误:clang 前端命令因信号 2 而失败(使用 -v 查看调用)
【问题讨论】:
标签:
objective-c
xcode
linker-errors
automatic-ref-counting
ios-simulator