在崩解更新后的未定义符号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在崩解更新后的未定义符号相关的知识,希望对你有一定的参考价值。
在我的项目中更新了crashlytics框架之后我遇到了一个问题,当然,通过结构应用程序,它是精确的链接器错误,请在下面记录。
Ld /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator/InternalApp.app/InternalApp normal x86_64
cd /Users/losiennik/temp/InternalApp-ios-fork_DONOTREMOVE
export IPHONEOS_DEPLOYMENT_TARGET=7.0
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.3.sdk -L/Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator -F/Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator -F/Users/losiennik/temp/InternalApp-ios-fork_DONOTREMOVE -filelist /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/Objects-normal/x86_64/InternalApp.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -ObjC -lPods-AFNetworking -lPods-ActivateYourSalon -lPods-CocoaLumberjack -lPods-Foursquare-API-v2 -lPods-GZIP -lPods-MBProgressHUD -lPods-MLPAutoCompleteTextField -lPods-MTDates -lPods-UICKeyChainStore -lPods-UIResponder+KeyboardCache -lPods-WYPopoverController -lPods-zipzap -lc++ -lz -framework CoreGraphics -framework Foundation -framework MobileCoreServices -framework QuartzCore -framework Security -framework SystemConfiguration -framework UIKit -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -stdlib=libc++ -mios-simulator-version-min=7.0 -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/InternalApp.app.xcent -framework EventKit -framework MessageUI -framework Crashlytics -framework QuartzCore -framework MapKit -framework CoreLocation -framework CoreGraphics -framework UIKit -framework Foundation -lPods -framework Fabric -Xlinker -dependency_info -Xlinker /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Intermediates/InternalApp.build/Debug-iphonesimulator/InternalApp.build/Objects-normal/x86_64/InternalApp_dependency_info.dat -o /Users/losiennik/Library/Developer/Xcode/DerivedData/InternalApp-cujowfodrnucvoglpkjjfmshsvrs/Build/Products/Debug-iphonesimulator/InternalApp.app/InternalApp
Undefined symbols for architecture x86_64:
"_CLSLog", referenced from:
-[IAPSyncManager processSuccessfulHTTPRequest] in IAPSyncManager.o
-[IAPLogService writeContentsOfURL:toStream:] in IAPLogService.o
-[IAPServerObjectMapping serializedPrimaryKeyToJSONStringFrom:forObject:] in IAPServerObjectMapping.o
"_CLSNSLog", referenced from:
___65-[IAPWeekDashboardViewController asyncInternalAppFetchSuccess:failure:]_block_invoke in IAPWeekDashboardViewController.o
-[IAPSyncManager prepareForSynchronizationInForeground:] in IAPSyncManager.o
___50-[IAPSyncManager reenableIdleTimerAfterTwoMinutes]_block_invoke in IAPSyncManager.o
-[IAPSyncManager reenableIdleTimer] in IAPSyncManager.o
-[IAPJSONValidator validateJSONWithError:] in IAPJSONValidator.o
-[IAPSynchronisationRelationship stringWithID:] in IAPSynchronisationRelationship.o
_POSTDataDictionary in IAPSyncConstants.o
...
"_OBJC_CLASS_$_Crashlytics", referenced from:
objc-class-ref in IAPSyncManager.o
objc-class-ref in Crashlytics+Utilities.o
l_OBJC_$_CATEGORY_Crashlytics_$_Utilities in Crashlytics+Utilities.o
objc-class-ref in IAPAppDelegate.o
(maybe you meant: _OBJC_CLASS_$_CrashlyticsPlaceholderStatic)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我尝试用很多方式解决这个问题,但我做不到。我试过的方法:
Xcode Clean
对该项目采取的行动- 删除
/Users/losiennik/Library/Developer/Xcode/DerivedData
的内容 - 从
Crashlytics.framework
中删除并添加Fabric.framework
和Xcode 6.3.1
Build Phases
目标Link Binary from Libraries
- 从物理上删除这些框架文件,并从我从头开始安装框架的其他项目中再次添加它们
- 删除
/var/folders
内容
我已经尽可能地组合了这个可能的解决方案,并尝试了运行和杀死xcode,重新启动操作系统。什么都行不通。
你还有其他建议吗?也许有人知道Xcode
在哪里存储可以在编译和链接进程时使用的临时文件?更新该框架时,有人有类似的经验吗?
事实证明,问题的原因与我遇到的另一个问题有关。该问题导致我无法使用先前添加到我们旧组织帐户的结构插件帮助注册特定的应用程序ID。我从旧组织中删除了该应用ID,但仍然无法将其添加到新组织中。
感谢Fabric支持成员,事实证明我的应用程序ID在后端方面处于奇怪的状态。当更正后,我的应用程序ID出现在我们的组织帐户上,然后结构插件下载了正确版本的Crashlytics.framework
文件。之后,我对Apple Mach-O Linker Error
与Crashlytics二进制文件有关的问题没有任何问题。
总结一下,当您遇到上述问题或添加应用程序ID时,请直接写入结构支持,不要浪费您的时间。
谢谢面料团队:)!
如果您决定不使用CocoaPods,那么您显然使用了第二个选项,将Run Script放入Build阶段:
./Fabric.framework/run YourUniqueId!#$@#%!#$%@#$^@$3295209582523#@%!#$@%!#%235
运行脚本将复制文件:
- Crashlytics.framework
- Fabric.framework
进入你的项目目录,但有时它还不够,你还需要将2个框架复制/引用到你的Xcode项目中。
可以导入2个框架(在上述复制过程之前),但Xcode需要引用它们。
之后应该编译好。
当我更新Xcode时,这个问题出现了。卸载并安装较新版本而不是更新后,它已得到修复。
以上是关于在崩解更新后的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章
架构 arm64 的未定义符号:Crashlytics (CLSBetaController.o) 中的 CLSBetaController 块调用