在進(jìn)行iOS原生開發(fā)過程中叠殷,當(dāng)項(xiàng)目持續(xù)迭代,工程中可能會(huì)積累各種各樣的第三方庫揖庄,難免會(huì)出現(xiàn)一些重復(fù)引用的情況:
ld: 44 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
一般如果是自己引用的栗菜,我們可以把自己引用的那份改名甚至直接刪除來解決,但是如果他們都是第三方庫怎么辦呢蹄梢?上面就是兩個(gè)庫同時(shí)使用了SDWebImage疙筹,導(dǎo)致44個(gè)重復(fù),這種時(shí)候除了給第三方庫的客服反饋的方法外禁炒,更好的辦法是自己解決而咆,下面是具體方法:
一、
從報(bào)錯(cuò)信息中找到重復(fù)的庫文件(其中之一即可)幕袱,我這里是liblibWeex.a中使用了SDWebImage暴备,把liblibWeex.a拷貝出來。
二们豌、
打開終端馍驯,cd到liblibWeex.a所在文件夾阁危,并輸入
lipo -info liblibWeex.a 查看架構(gòu)信息:
Architectures in the fat file: liblibWeex.a are: armv7 x86_64 arm64
待用。
三汰瘫、
從上面的信息“the fat file”中可以看出顯然需要瘦身,分別輸入
lipo liblibWeex.a -thin armv7 -output liblibWeex.armv7
lipo liblibWeex.a -thin arm64 -output liblibWeex.arm64
lipo liblibWeex.a -thin x86_64 -output liblibWeex.x86_64
生成3個(gè)子文件備用.
四擂煞、
接下來需要查看.o文件混弥,比如,輸入
ar -t 文件夾/liblibWeex.armv7
可以查看liblibWeex.armv7 中的所有.o文件对省,查看這些文件的文件名蝗拿,并和xcode編譯報(bào)錯(cuò)時(shí)顯示的文件名比對,找出重復(fù)報(bào)錯(cuò)的那些蒿涎,記錄下來待用哀托。
五、
使用-d命令刪除這些文件劳秋,比如輸入
ar -d -sv liblibWeex.armv7 SDWebImageDownloaderOperation.o
就刪除了仓手,剩下的就是之前生成的子文件都刪一遍(我這次要?jiǎng)h好多TT)
六、
最后就是合并文件了玻淑,把處理好的3個(gè)文件使用命令
lipo -create -output liblibWeex.a liblibWeex.x86_64 liblibWeex.arm64 liblibWeex.armv7
進(jìn)行合并嗽冒,這6步走完就大功告成了。
本文結(jié)束?补履。