Undefined symbols for architecture i386:
這個(gè)錯(cuò)誤太常見(jiàn)了巫财,也很磨人斜棚。說(shuō)一下architecture 的概念拄氯,架構(gòu)火诸,計(jì)算機(jī)上是指內(nèi)核依賴(lài)的指令集锦针,架構(gòu)的概念來(lái)自于把軟件構(gòu)建和建筑建造的類(lèi)比,基礎(chǔ)指令集決定了你的軟件的work程度置蜀。iOS開(kāi)發(fā)常見(jiàn)arm64(64位處理器5s&&later,mini2&&later)armv7伞插,armv7s(32位處理器,4s盾碗,5),i386舀瓢,x86_64(模擬器)(是我自己總結(jié)的廷雅,不對(duì)之處,請(qǐng)指出)
此類(lèi)錯(cuò)誤屬于build不通過(guò)京髓,相當(dāng)于說(shuō)缺少某些build的必要條件航缀。例如少了點(diǎn)什么或者多了點(diǎn)什么造成的。通逞咴梗可以在error中讀出信息來(lái)芥玉。帶有duplicate就是表示多了,而且xcode會(huì)親切的支持文件名(注意xcode給的類(lèi)名备图,變量名是屬于它翻譯過(guò)的)灿巧。
下面幾條說(shuō)一下自制靜態(tài)庫(kù)的問(wèn)題。靜態(tài)庫(kù)制作圖文詳解的博客很多揽涮,自行百度抠藕。這里列出一些常見(jiàn)問(wèn)題的解決方式(沒(méi)有一個(gè)工具是可以吃遍天的,請(qǐng)多嘗試)
1.缺支持的frameworks蒋困,此時(shí)文件紅色盾似,或壓根沒(méi)有 缺少需要支持的framework或者類(lèi)文件。請(qǐng)?zhí)砑友┍辏R?jiàn)缺失libc和lic++;
2.compile Sources里沒(méi)有添加相應(yīng)的.m 文件零院,一個(gè)你熟悉的類(lèi)名出現(xiàn)在錯(cuò)誤信息當(dāng)中溉跃,去compile Sources檢查下
3.自己打包的lib也要保證.m 齊全,同2.注意不要搞錯(cuò).m和.h告抄。compile Sources當(dāng)中不需要加入.h文件撰茎。加了會(huì)錯(cuò)的。類(lèi)的實(shí)現(xiàn)中也不要#import .m 文件玄妈,編譯器會(huì)報(bào)錯(cuò)的乾吻。
4.-all_load ,這個(gè)用于靜態(tài)庫(kù)中包含類(lèi)別時(shí)拟蜻。
5.使用release模式build绎签,保證.a支持所有的architecture。在run schema中使用release模式酝锅,這樣build出的.a會(huì)支持32位和64位诡必。
6.使用lipo 命令 ,命令用于把真機(jī)支持和模擬器支持的.a 合并搔扁。
lipo -create iphoneos/lib.a iphonesimulator/lib.a -output ./lib.a
lipo -info XXX/lib.a 查看靜態(tài)庫(kù)支持的架構(gòu)