iOS Undefined symbols for architecture armv7 _OBJC_CLASS_$_**", referenced from: objc-class-ref i...

最近項(xiàng)目打包時(shí)報(bào)錯(cuò)如下
Undefined symbols for architecture armv7:
_OBJC_CLASS_$_DTImageTextAttachment", referenced from:
      objc-class-ref in TZJCommodityTableViewViewModel.o
  "_OBJC_CLASS_$_DTLazyImageView", referenced from:
      _OBJC_CLASS_$_ZSDTLazyImageView in ZSDTLazyImageView.o
  "_OBJC_METACLASS_$_DTLazyImageView", referenced from:
      _OBJC_METACLASS_$_ZSDTLazyImageView in ZSDTLazyImageView.o
  "_OBJC_METACLASS_$_DTAttributedTextCell", referenced from:
      _OBJC_METACLASS_$_TZJCommodityRichCell in TZJCommodityRichCell.o
      _OBJC_METACLASS_$_ZSDTCoreTextCell in ZSDTCoreTextCell.o
  "_OBJC_CLASS_$_DTAttributedTextCell", referenced from:
      _OBJC_CLASS_$_TZJCommodityRichCell in TZJCommodityRichCell.o
      _OBJC_CLASS_$_ZSDTCoreTextCell in ZSDTCoreTextCell.o

網(wǎng)上找到的方法大致都是說(shuō)因?yàn)轫?xiàng)目中使用的.a或framework沒(méi)有配置好的原因,配置方法如下幾種,嘗試配置后還是沒(méi)有解決我的問(wèn)題

1.將三方庫(kù)導(dǎo)入項(xiàng)目時(shí)查看是否勾選了Add to tarets,如下圖
image
2.如果某個(gè)類(lèi)出現(xiàn).o的錯(cuò)誤日志如下圖,查看是否在Build PhasesCompile Sources中有重復(fù)導(dǎo)入的情況,如果有把多余的刪掉
image
image
3.在Build Phases中的 Link Binary With LibrariesEmbed Frameworks里添加相應(yīng)的靜態(tài)庫(kù)
image
添加內(nèi)容
image
image
4.在Build Setting中的Other Linker Flags中 添加-Objc并在Search Path中的Framework Search PathsHeader Search Paths中配置相應(yīng)的靜態(tài)庫(kù)所在路徑,如下圖
image
image
后來(lái)看到一個(gè)關(guān)于armv7相關(guān)說(shuō)明,于是查了一下armv7和arm64的知識(shí)

armv7s設(shè)備: iPhone5, iPhone5C, iPad4

arm64 設(shè)備: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display) 之后出的到X都是arm64的設(shè)備了

關(guān)鍵原因來(lái)了:因?yàn)橛行┤綆?kù)靜態(tài)庫(kù)在生成的時(shí)候并沒(méi)有做armv7s的兼容,因?yàn)楫?dāng)下基本淘汰可以摒棄了,但是我們的項(xiàng)目里可能做了兼容armv7s的配置,這就導(dǎo)致我們?cè)谑褂眠@類(lèi)靜態(tài)庫(kù)打包時(shí)報(bào)錯(cuò) Undefined symbols for architecture armv7:,兩種方法解決,一個(gè)是在生成靜態(tài)庫(kù)時(shí)讓靜態(tài)庫(kù)兼容armv7s另一個(gè)就是把自己項(xiàng)目里配置兼容**armv7s的地方去掉******

第一種方法大家自行百度吧,下面說(shuō)第二種在哪里改,看了一篇博客截圖如下在Build Setting里的第一行

image
但是我的項(xiàng)目里并沒(méi)有Valid Architectures,只有一個(gè)****Architectures****里面有arm64和armv7s而且無(wú)法編輯如下圖
image
搞到這里心里想說(shuō)一萬(wàn)句CNM,蘋(píng)果的坑咋這么多,最后發(fā)現(xiàn)可以在Build SettingUser-Defined中添加VALID_ARCHS去配置arm64和armv7s,如下圖
image

至此我的問(wèn)題終于解決了,希望對(duì)遇到同樣問(wèn)題的朋友有幫助,可以家魏鑫lixiaowu1129 希望大家探討iOS相關(guān)技術(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容