关于 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

你可能感兴趣的:(关于 Undefined symbols for architecture xxx 的另一种可能)