問題描述
鏈接錯誤提示函如下:
ld: in UMComBaseEvent.o, building for iOS Simulator, but linking in object file built for iOS, file 'UMCommon' for architecture arm64.
個人分析
出現(xiàn)這種情況,原因應該友盟編譯的庫提供了兩套指令集的二進制數(shù)據(jù),一套是給真機編譯的,一個是給模擬器編譯的,而給模擬器編譯的指令集是x86指令集(以前的Mac用的)。
而新的蘋果開發(fā)設(shè)備用的處理器是M1處理器,所以在開發(fā)機上的模擬器自然也是基于ARM64架構(gòu)。這就導致了友盟的庫在模擬器上編譯不兼容,因為友盟基于模擬器的編譯數(shù)據(jù)包是x86指令集。
由于在早期的xcode版本中,默認是添加x86指令集的支持的,但是因為新的設(shè)備都是用M1處理器了,就把這個移除了,所以才導致編譯錯誤,而要解決這個問題,就要重新告訴編譯環(huán)境繼續(xù)支持x86 。
解決方法
解決該問題的方法是告訴開發(fā)環(huán)境,在開發(fā)機上運行模擬器時,不要使用arm64架構(gòu)進行編譯。
具體方法是在工程配置的Excluded Architectures中,把debug分支的Any iOS Simulator SDK設(shè)置為arm64 。
還有不清楚的地方
這里有個地方我是還不清楚的,既然新的蘋果設(shè)備是基于M1處理器了,那么模擬器也是基于M1處理器,為什么它還能兼容x86?是因為模擬器同時兼容arm64和x86嗎?歡迎知道的朋友告知。
想要一起討論的朋友可以在我的公眾號風海銅鑼的加群菜單欄中申請加群完成加群申請,一起共同進步。