前言
作為iOS開發(fā)中最常見的問題之一塔嬉,今天好好來把它拎清一下屈糊!
OC基于C語言的榛,是擴充C的面向對象編程語言。有.h和.m文件逻锐,.h頭文件中是對定義的聲明夫晌,而.m中則是具體的實現(xiàn)邏輯代碼雕薪。
常見錯誤
我們來理解一下:
未能在 x86_64?? 架構下發(fā)現(xiàn)定義的標識符:
OC 類 ZMBLEManager, 在以下文件中被引用:
在ViewController中引用了OC類晓淀。
分析下:
1)在ViewController中使用了“ZMBLEManager”所袁,在編譯時未報錯,說明在.h文件中有“ZMBLEManager”的聲明凶掰。
2)鏈接時報錯“Undefined symbols”燥爷,說明在.M文件中并沒有ZMBLEManager的實現(xiàn)。
解決思路
1)去查看對應的.m文件懦窘,類的實現(xiàn)是否存在G棒帷(一般沒人會犯這種錯誤吧~~~)
2)從外部導入的文件沒有加入到特定的target中。
通常此類問題都是導入靜態(tài)庫之后會產(chǎn)生的畅涂,那我們就要檢查一下導入靜態(tài)庫的姿勢是否正確港华!
1)必須引入頭文件對應的.a文件,一定要勾選target午衰。
2)檢查Build Phases里的Link Binary With Libraries(如果未勾選target會造成Link Binary With Libraries不包含對應的.a)和Build Settings里的幾項Search Path(查看路徑是否設置正確)立宜。
3)未包含處理器架構指令集的問題。報錯時的提示一般都是“Undefined symbols for architecture x86_64”之類的臊岸,而“for architecture x86_64”就是說沒有支持x86_64橙数,在Build settings里architecture相關的幾項需要配置正確。
相信很多朋友都碰到過這樣的情況扇单,使用第三方提供的SDK商模,在模擬器上無法運行,但是切換到真機就能跑的飛起V├健J┝鳌!
這是因為引入的.a文件中包含了對應真機的架構鄙信,但沒有包含對應的模擬器架構瞪醋!
如果你想深入了解可以查看iOS 靜態(tài)庫 - 常用操作指令 ,嘗試去分解你的靜態(tài)庫装诡,了解內(nèi)部構造银受。
如果以上方案都沒能解決你的問題,歡迎私信鸦采!當然還有可能你的靜態(tài)庫跟.h本來就是不對稱的~~~~~
下期預告
iOS 異常處理 - Duplicate Symbols