iOS靜態(tài)庫(kù)遇到的坑

問(wèn)題:

  • iOS開(kāi)發(fā)中我們經(jīng)常會(huì)遇到這種錯(cuò)誤Undefined symbols for architecture arm64 這個(gè)錯(cuò)誤表示工程某些地方不支持arm64指令集沛硅。而這個(gè)問(wèn)題基本上是由于引入了他人的靜態(tài)庫(kù)

問(wèn)題分析:

  • 對(duì)于iOS設(shè)備來(lái)說(shuō)iOS的指令集有armv6偏化、armv7洪囤、armv7s缚去、arm64 這樣四種雕凹,不同型號(hào)的iOS設(shè)備使用不同的指令集,下面是各自的區(qū)別:

armv6

  • iPhone汽抚、iPhone 3G
  • iPod 1G抓狭、iPod 2G

armv7

  • iPhone 3GS、iPhone 4
  • iPod 3G造烁、iPod 4G否过、iPod 5G
  • iPad、iPad 2惭蟋、iPad 3苗桂、iPad Mini

armv7s

  • iPhone 5、iPhone 5C
  • iPad 4

arm64

  • iPhone 5S iPhone 6 iPhone 6Plus
  • iPad Air, Retina iPad Mini

問(wèn)題解決:

1.檢查一下靜態(tài)庫(kù)的配置路徑是否正確

Build Settings>Search Paths>Library Search Path(一定要認(rèn)真檢查)

2.查看了靜態(tài)庫(kù)所支持的架構(gòu)

打開(kāi)終端輸入查看命令lipo - info xxx.a ,結(jié)果如下:


lipo.png
3.檢查一下Architectures的配置

Architectures:該編譯選項(xiàng)指定了工程將被編譯成支持哪些指令集告组,支持指令集是通過(guò)編譯生成對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)包實(shí)現(xiàn)的誉察,如果支持的指令集數(shù)目有多個(gè),就會(huì)編譯出包含多個(gè)指令集代碼的數(shù)據(jù)包惹谐,造成最終編譯的包很大。
Build Active Architectures Only:當(dāng)該選項(xiàng)設(shè)置成YES時(shí)驼卖,你連上一個(gè)armv7指令集的設(shè)備氨肌,就算你的Valid Architectures和Architectures都設(shè)置成armv7/armv7s/arm64,還是依然只會(huì)生成一個(gè)armv7指令集的二進(jìn)制包酌畜。通常情況下怎囚,該編譯選項(xiàng)在Debug模式都設(shè)成YES,Release模式都設(shè)成NO桥胞。
Valid Architectures:該編譯項(xiàng)指定可能支持的指令集恳守,該列表和Architectures列表的交集,將是Xcode最終生成二進(jìn)制包所支持的指令集贩虾。
注意:1催烘、指令集是向下兼容的。比如缎罢,armv7s指令集的設(shè)備伊群,可以兼容運(yùn)行使用armv7考杉、armv6編譯的程序〗⑹迹可以根據(jù)自己需要配置崇棠。

4.設(shè)置編譯參數(shù)

Build Settings -> Linking -> Other Linker Flags
添加對(duì)應(yīng)的庫(kù)文件:-lAPayLib

注:
1.前面加橫杠’-‘,l,編譯的時(shí)候xcode默認(rèn)會(huì)自動(dòng)把庫(kù)名加上lib前綴。
2.如果靜態(tài)庫(kù)有category,那么需要添加-ObjC參數(shù)標(biāo)識(shí)丸卷,否則可能會(huì)報(bào):unrecognized selector sent to instance
3.參數(shù)說(shuō)明引用

  • -ObjC:加了這個(gè)參數(shù)后枕稀,鏈接器就會(huì)把靜態(tài)庫(kù)中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中
  • -all_load:會(huì)讓鏈接器把所有找到的目標(biāo)文件都加載到可執(zhí)行文件中,但是千萬(wàn)不要隨便使用這個(gè)參數(shù)谜嫉!假如你使用了不止一個(gè)靜態(tài)庫(kù)文件萎坷,然后又使用了這個(gè)參數(shù),那么你很有可能會(huì)遇到ld: duplicate symbol錯(cuò)誤骄恶,因?yàn)椴煌膸?kù)文件里面可能會(huì)有相同的目標(biāo)文件食铐,所以建議在遇到-ObjC失效的情況下使用-force_load參數(shù)。
  • -force_load:所做的事情跟-all_load其實(shí)是一樣的僧鲁,但是-force_load需要指定要進(jìn)行全部加載的庫(kù)文件的路徑虐呻,這樣的話,你就只是完全加載了一個(gè)庫(kù)文件寞秃,不影響其余庫(kù)文件的按需加載 
    4.編譯方式引用
    靜態(tài)庫(kù)中采用ObjectC++實(shí)現(xiàn)斟叼,因此需要您保證您工程中至少有一個(gè).mm后綴的源文件(您可以將任意一個(gè).m后綴的文件改名為.mm),或者在工程屬性中指定編譯方式春寿,即將XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As設(shè)置為"Objective-C++"

參考:http://www.cnblogs.com/bomo/p/4760791.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朗涩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绑改,更是在濱河造成了極大的恐慌谢床,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厘线,死亡現(xiàn)場(chǎng)離奇詭異识腿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)造壮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門渡讼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人耳璧,你說(shuō)我怎么就攤上這事成箫。” “怎么了旨枯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵蹬昌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我召廷,道長(zhǎng)凳厢,這世上最難降的妖魔是什么账胧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮先紫,結(jié)果婚禮上治泥,老公的妹妹穿的比我還像新娘。我一直安慰自己遮精,他們只是感情好居夹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著本冲,像睡著了一般准脂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檬洞,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天狸膏,我揣著相機(jī)與錄音,去河邊找鬼添怔。 笑死湾戳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的广料。 我是一名探鬼主播砾脑,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼艾杏!你這毒婦竟也來(lái)了韧衣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤购桑,失蹤者是張志新(化名)和其女友劉穎畅铭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體勃蜘,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顶瞒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了元旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡守问,死狀恐怖匀归,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耗帕,我是刑警寧澤穆端,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站仿便,受9級(jí)特大地震影響体啰,放射性物質(zhì)發(fā)生泄漏攒巍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一荒勇、第九天 我趴在偏房一處隱蔽的房頂上張望柒莉。 院中可真熱鬧,春花似錦沽翔、人聲如沸兢孝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跨蟹。三九已至,卻和暖如春橘沥,著一層夾襖步出監(jiān)牢的瞬間窗轩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工座咆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痢艺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓箫措,卻偏偏與公主長(zhǎng)得像腹备,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斤蔓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容