美文网首页
编译报错总结

编译报错总结

作者: IT卡农 | 来源:发表于2021-08-24 15:29 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:编译报错总结

          本文链接:https://www.haomeiwen.com/subject/xocqvltx.html