linker 错误解决方案(持续收集)
Undefined symbols for architecture x86_64:
linker错误通用解决方法
随着iOS 11正式发布,遂决定不再支持iOS 7,使用WKWebView替换UIWebView加载网页,编译后出现如下错误(环境:Xcode9; Deployment Target: 8.0):
每次遇到 linker 错误总会惊慌失措,望着满屏23个红色标记早已乱了分寸,由于是使用WKWebView引入<WebKit/WebKit.h>,所以我找到 WKWebView 引用处,Xcode给出的错误提示是 could not build module webkit,尝试了 Getting error “No such module” using Xcode 上面的方法,更改Framework和头文件寻找路径,Clean DerivedData甚至重启Xcode,可错误一个也没有减少.
继续折腾,接下来点进左侧问题导航查看错误具体信息,网上查找 Undefined symbols for architecture x86_64:错误,解决symbol(s) not found for architecture x86_64报错指引了解决方向,这些错误是没有引入相应框架导致的.
OK,到了这时候,只要找到缺少的框架接着引入就可以了.先来看WKWebViewConfiguration,因为使用WKWebView首先必须要引入WebKit,来到工程TARGET -> Build Phrases ->
Link Binary With Libraries 添加 WebKit.framework
添加完 WebKit.framework 后再次编译,发现减少了2个 WKxxx 类的错误,还剩下21个错误.继续查找还缺少的框架,现在的错误信息如下:
借此列举几个根据错误信息查找缺失框架的方法:
-
PHxxx类的错误引用都在TZImageManager类中,查看TZImageManager.h文件得知其导入了Photos框架.
- 我们也可以通过错误关键字搜索得知缺失的框架,如
"_OBJC_CLASS_$_MKAnnotationView",referenced from:
-
在工程中搜索NSManagedObject,NSEntityDescription,并找到相关位置,然后按住command+左击(NSManagedObject),发现直接进入了系统的CoreData框架中
依次导入 Photos.framework, MapKit.framework, CoreData.framework,再次编译成功.
duplicate symbol _OBJC_CLASS_$_XXX
linker错误
- 你可能将 .m 实现代码放在了两个不同的文件里
- 也许你确实只有一个实现代码的 .m 文件,但是你项目中存在或引入的第三方包里有与此同名的文件
尝试去搜索整个工程里的这个class,确保只能拥有一份此文件