关于 Undefined symbols for architecture xxx 的另一种可能

几个月之前偶然遇到过这个问题,当时并没有额外做记录,今天研究阿里云视频直播再次遇到了,大家工作中应该也会遇到,而一般这类型问题的答案中比较少提到这一点。以此记录吧,希望能帮到需要的人。

首先,Undefined symbols说明某些文件未参与编译,如果是你工程里暴露出来的类,可以直接在build phases里,把类添加进来即可。

如果不是暴露出来的类,比如pod 进来的,target-》build setting -》other link flags 添加一个$(inherited) 即可完成自动引用。

如果是苹果的库文件或者自己手动拖入的库,可以手动导入,比如

具体可以在build phases 里 "Link Binary With Libraries"添加想要的库。

以上这几种方式,可以解决绝大部分的此类问题。但还有一种可能,就是这个没能参与编译的动态或者静态库,根本不支持你目前选择编译安装的模拟器或者真机的cpu 架构。这句话可能有点绕口难理解,关于这部分我希望后续我可以进行详尽补充,但目前可以这样理解:iOS 设备cpu架构分为好几种,而在打包库的时候是针对不同架构cpu生成不同的包文件,如果想要支持各种机型,模拟器,你需要打包不同的包并进行合并,这样的framework或者.a静态库才能支持所有iOS 设备和模拟器。

举个例子,

我查看了alithirdparty.framework 这个库支持的cpu 架构是armv7 和arm64.此时当你在项目中引入了这个库,且你使用了模拟器编译的时候就会出现类似图下的错误。

ali库

因为模拟器的架构是x86_64,这个库不支持。这种情况下的报错,因为是第三方库,你是没办法处理的。只能选择它支持的架构进行编译安装。如果是你自己打包的静态库或者动态库就简单了,你可以分别打包模拟器或者真机库并进行合并,再将合并后的文件导入项目中即可。

有疑问的同学,可以留言,希望我的记录能对你有一点启发。

                                                                                                           sophie     2018-6-8

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

推荐阅读更多精彩内容

  • (原文:How to Create a Framework for iOS作者:Sam Davies 译者:Mr_...
    Yaanco阅读 6,976评论 4 5
  • 首先声明 因为我是在真机上编译的项目,所以报错的架构(CPU指令集)为arm64。 如果我们使用64位模拟器(iP...
    VV木公子阅读 22,568评论 8 34
  • 一。每次遇到这种错误就头痛,不知道要害死多少脑细胞了,就在这里做个总结吧 可能会遇到这几种错误: Undefine...
    ttdiOS阅读 14,596评论 2 11
  • 原文链接在上一篇教程(中译版)中,你学到了怎么样创建一个可复用的圆形旋钮控件。然而你可能不清楚怎样让其他开发者更方...
    _冷忆阅读 7,122评论 9 5
  • 什么时候自己是在不断思考的,读书写字的时候。什么时候思维最活跃,早晨。 树丰老师分享他自己早晨做的事,就是语...
    右右多阅读 1,157评论 0 1