1. Link error
1.1 Undefined symbols
解决方法是在Build Phases的Link Binary With Libraries里加入OpenGLES.framework,再编译就ok了
这个为什么造成Undefined symbols呢?build link阶段,用arm64生成的.o文件,无法link用armv7s或者armv7生成的.o文件,所以就会link error
1、framework缺失这类错误一般是因为库文件没导入引起的。在导入CoreMedia.framework之后,错误消失。怎样快速找到缺失的库,这里面是有规律的。 前两个字母CM正是CoreMedia的缩写。还有类似的比如: _CV是缺失CoreVideo _CA是缺失CoreAnnimation,也就是QuartzCore _AV是缺失AVFoundation
2、dylib缺失动态库缺失导致的undefined symbols错误,iconv就是库名:libiconv就是我们要添加的动态库3、自定义文件未加入Compile Sources
OBJC_CLASS$_后面的就是我们需要添加到编译源里的类名,将ViewController.m添加到Compile Sources中即可。
1.2 duplicate symbols for architecture x86_64
link阶段发现重复的2个文件
ios的Framework是共享动态库,不会被打包到app中,非系统Framework静态库都会被打包到app中,所以会产生"Duplicate Symbol"的错误。
在Build Settings->Other link flags中删除所有的-all_load与-force_load, XCode会很smart的去掉"Duplicate Symbol"。
1.3 library not found for -XXX
某个库的连接引用有问题, 解决的办法就是在项目的target里,选中Link Binary With Libraries 里的.a或framework 取消再加入,就可以了
2. compile error
2.1 'XXX.h' file not found
import一个不存在的文件:
2.2 Use of undeclared identifier 'XXXClass'
直接用一个不存在的类:
2.3 No visible @interface for 'XXX' declares the selector 'yyy'
没有在interface接口文件中,找到任何你引用的selector(方法)。有可能是没有在interface进行声明定义,也有可能是字母输入错误。
如果只有声明没有实现,则会触发运行时错误
-[XXX yyy]: unrecognized selector sent to instance 0x7f9e8cb01550
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[XXX yyy]: unrecognized selector sent to instance 0x7f9e8cb01550'
参考文章
https://www.iteye.com/blog/kyfxbl-2147896
https://blog.csdn.net/Game_jqd/article/details/108552714
https://www.jianshu.com/p/31338152054f?nomobile=yes
https://www.pianshen.com/article/47541911362/
网友评论