Undefined symbols for architecture i386:
这个错误太常见了,也很磨人。说一下architecture 的概念,架构,计算机上是指内核依赖的指令集,架构的概念来自于把软件构建和建筑建造的类比,基础指令集决定了你的软件的work程度。iOS开发常见arm64(64位处理器5s&&later,mini2&&later)armv7,armv7s(32位处理器,4s,5),i386,x86_64(模拟器)(是我自己总结的,不对之处,请指出)
此类错误属于build不通过,相当于说缺少某些build的必要条件。例如少了点什么或者多了点什么造成的。通常可以在error中读出信息来。带有duplicate就是表示多了,而且xcode会亲切的支持文件名(注意xcode给的类名,变量名是属于它翻译过的)。
下面几条说一下自制静态库的问题。静态库制作图文详解的博客很多,自行百度。这里列出一些常见问题的解决方式(没有一个工具是可以吃遍天的,请多尝试)
1.缺支持的frameworks,此时文件红色,或压根没有 缺少需要支持的framework或者类文件。请添加,常见缺失libc和lic++;
2.compile Sources里没有添加相应的.m 文件,一个你熟悉的类名出现在错误信息当中,去compile Sources检查下
3.自己打包的lib也要保证.m 齐全,同2.注意不要搞错.m和.h。compile Sources当中不需要加入.h文件。加了会错的。类的实现中也不要#import .m 文件,编译器会报错的。
4.-all_load ,这个用于静态库中包含类别时。
5.使用release模式build,保证.a支持所有的architecture。在run schema中使用release模式,这样build出的.a会支持32位和64位。
6.使用lipo 命令 ,命令用于把真机支持和模拟器支持的.a 合并。
lipo -create iphoneos/lib.a iphonesimulator/lib.a -output ./lib.a
lipo -info XXX/lib.a 查看静态库支持的架构