动态库运行时报错“selector not recognized”

      为了打包链接库内的资源文件,将静态库修改为动态库。程序在编译的时候完全正常,在运行时却出现:“selector not recognized”,也就是找不到方法定义的错误,发现报错的函数出现在扩展类中,更改为其它函数则可以正常运行。

       查找资料定位到报错的原因是:Objective-C没有为每个函数(或者方法)定义链接符号,它只为每个类创建链接符号。这样当在一个静态库中使用类别来扩展已有类的时候,链接器不知道如何把类原有的方法和类别中的方法整合起来,就会导致调用类别中的方法时,出现”selector not recognized”。为了解决这个问题,引入了-ObjC标志,它的作用就是将静态库中所有的和对象相关的文件都加载进来。

    在Other Linker Flags里面加入-ObjC标志,问题顺利解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 12,126评论 3 42
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,824评论 0 9
  • 仅以方便自己查阅记录前言1.静态库和动态库有什么异同?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗...
    190CM阅读 4,314评论 0 4
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,661评论 33 466
  • 良辰乐为你分析原因。原理是: 让某生物舒服,这生物会更虚弱而死。 基因底层里面逻辑是:优胜劣汰,生存第一,效率第一
    工匠良辰阅读 383评论 0 0