在項(xiàng)目運(yùn)行時(shí),可能會(huì)出現(xiàn)一些編譯錯(cuò)誤.
-L 錯(cuò)誤
如:
directory not found for option '-L/Users/xxx/Library/Developer/Xcode/DeriveData
緊接其后的是未發(fā)現(xiàn)一些第三方框架,如:Masonry等的路徑.
這是在使用 Cocoa pods 后,編譯產(chǎn)生的第三方庫(kù)的問(wèn)題.
- 首先,你需要確定你打開(kāi)的是 xxx.xcworkspace 文件而不是 xcodeproj文件
- 其次,你報(bào)的錯(cuò)是- L 說(shuō)明是出現(xiàn)Library 出現(xiàn)了問(wèn)題. 你需要選中 target --> buildSetting ,搜索 lib,找到 Library Search Paths
- 這里存放外部引用的庫(kù)的搜索路徑,通常是 $(inherits),其后是一些你導(dǎo)入的第三方庫(kù)的地址;將后面的庫(kù)文件地址刪除,保留$(inherits),然后編譯
- 如果,上面編譯不通過(guò),stackoverflow 上說(shuō),可以嘗試將$(SRCROOT)替換 $(inherits),不過(guò)這個(gè)我沒(méi)有成功,好像是適用于 xcode 5
- 最后的辦法,重置所有的第三方庫(kù)文件.刪除pod 文件夾,pod 的 file,lock 文件,進(jìn)入項(xiàng)目,刪除紅色部分;進(jìn)入 target --> build phases 中刪除pod 相關(guān)的 phases. 然后重建pod.
指令集編譯錯(cuò)誤
- 現(xiàn)在的 xcode 中通常使用 x86,armv7,armv7s 3中編譯指令,在某些時(shí)候也會(huì)出現(xiàn)編譯錯(cuò)誤,比如升級(jí) xcode8 后,導(dǎo)入其他人的項(xiàng)目.有些確實(shí)是 xcode 自身的 bug,我們無(wú)法處理.stackoverflow 也無(wú)法找到答案
- 關(guān)閉bitcode:進(jìn)入 target --> build setting -->搜索 bitcode -->build options ,關(guān)閉 bitcode
- 無(wú)法處理的話,將編譯指令兼容: targt --> buildsetings,把 build Archive Architetures only 設(shè)置為 YES
- 導(dǎo)入的包不對(duì),將需要的包,如地圖,推送的包重新導(dǎo)入
- 如果打包的時(shí)候出現(xiàn) armv7的錯(cuò)誤,或者 armv7s 的架構(gòu)錯(cuò)誤,可以嘗試清除打包文件,重新登錄開(kāi)發(fā)者帳號(hào)
- 最后的辦法,出現(xiàn) x86的架構(gòu)錯(cuò)誤,不用模擬器,直接手機(jī)運(yùn)行調(diào)試.如果打包出現(xiàn) armv7錯(cuò)誤,進(jìn)入 build setting --> 搜索 arm --> Valid Architectures 中 ,刪除 armv7.當(dāng)然,刪除后會(huì)導(dǎo)致項(xiàng)目不適配 iPhone4s 及以下的手機(jī). 如果上述方法不行,仍然報(bào) armv7s,你去其他地方找找,有答案請(qǐng)?jiān)u論
Undefined symbols for architecture arm64:"OBJC_CLASS$_xxx", referenced from: someFile
ld: symbol(s) not found for architecture arm64
編譯的時(shí)候產(chǎn)生 arm64 編譯指令集錯(cuò)誤,可能是導(dǎo)入的庫(kù)文件或者新的類(lèi)文件引用了某個(gè)項(xiàng)目中已有的第三方庫(kù)文件
1 .對(duì)于新加入的第三方庫(kù)文件:可以使用lipo -info 路徑/xxx.a
命令在終端查看這個(gè)庫(kù)適用那些編譯指令集Undefined symbols for architecture arm64: "OBJC_CLASS$_XXX", referenced from: objc-class-ref in RouteSearchVC.o ";是指在程序編譯的時(shí)候,RouteSearchVC 類(lèi)的編譯文件在 arm64的指令集中,xxx 類(lèi)出現(xiàn)了錯(cuò)誤.
一般在將某個(gè)類(lèi)文件導(dǎo)入當(dāng)前項(xiàng)目中回出現(xiàn)這種錯(cuò)誤,解決辦法:target ->build phases -> compile sources,在這里面將么有導(dǎo)入的文件重新添加
參考地址:解決OBJC_CLASS$_XXX的問(wèn)題
- 如果項(xiàng)目中導(dǎo)入某個(gè)類(lèi)簡(jiǎn)單的類(lèi)文件,出現(xiàn) arm64 報(bào)錯(cuò),先檢查build setting 中Architectures和Valid Architectures,是否有錯(cuò)誤,沒(méi)有錯(cuò),就按圖修改Other Linker Flags:
If your Architectures and Valid Architectures are all right, you may check whether you have added
$(inherited)
, which will add linker flags generated in pods, to Other Linker Flags as below:
添加$(inherited) .png