xcode64位編譯-ag真人国际官网
⑴ xcode build for ios simulator arm64
前言
將一個老項目由xcode11升級到xcode12的時候,在用模擬器編譯的時候,報了一個錯誤,具體如下:
「ld: building for ios simulator, but linking in dylib built for ios, file '/users/xxxx/work/git/xxx/framework/googlecast/googlecast.framework/googlecast' for architecture arm64」
我使用模擬器編譯的,遇到arm64的錯誤,一開始還是一頭霧水啊。於是google和網路就上了,經過一番查找,基本定位到問題了。
原因
下面翻譯一位外國同仁的解釋:
xcode 12實際上是apple silicon的墊腳石,但有了這個平台,我們將得到基於arm64的macos,模擬器也將運行在arm64架構上,而不是目前基於intel的x86_64架構。
xcode通常依賴於「run destination」來構建它的庫/應用程序,所以當一個模擬器被選擇為「run destination」時,它將為可用的模擬器架構構建應用程序,當一個設備被選擇為「run destination」時,它將為設備支持的架構構建(arm*)。
xcodebuild,在xcode 12 build系統中,arm64是支持apple silicon的有效架構。因此,當一個模擬器被選擇為運行目標時,它可能會嘗試針對基於arm64的模擬器編譯/鏈接你的庫/應用程序。所以它在
但xcodebuild只在發布版本中嘗試這個。因為「build active architecture only (only_active_arch)」構建設置通常被設置為「no」,僅用於「發布」配置。這意味著xcodebuild將嘗試為選定的運行目標構建所有庫/應用的架構變體。對於模擬器運行目標,它現在將包括x86_64和arm64,因為arm64在xcode 12 中也是一個支持apple silicon的模擬器架構。
了解原因後,剩下來就是如何解決了。
解決方法
首先看一下xcode11和xcode12在architecture配置這一塊的區別:
xcode11:中宴肢
xcode11中有valid architectures的配置項。
xcode12:
在xcode12中,在architecture配置組中,用excluded architectures代替了valid architectures,那麼valid architectures跑到哪裡去了,在user-defined配置組裡面。
我們的目的是能在xcode12的模擬器上順利編譯,那麼可按照下面的步驟修改:
1. 將build active architecture only配置的debug值改為yes。如下圖。
2. 如果在xcode11中有valid architectures的配置項,那麼請在xcode12的user-defined配置組裡面刪除valid architectures的配置項,同時在target上面的project裡面的user-defined配置組裡面同樣刪除valid architectures的配置項,如何刪除,選中,敲擊鍵盤的delete就可以了。
3. 將validate workspace配置項修改一次,一定要變成黑粗體,默認值是no,改成yes就可以,或者再改回no,反正得折騰一次。見下圖。(之前有一篇文章升級xcode12.3報錯提到過這個配置,可參考一下。)
4. 配置完前三步基本就能編譯通過了,如果還是報錯,請嘗試在excluded architectures的debug模式下添加arm64,如下圖:
經過這幾步,基本就能順利編譯通過了,不過別忘了再用真機編譯試試哦,別再影響了真機祥禪測試。
結束語
個人感覺這個是xcode12的一個坑了,不過如果所有的項目裡面都採用xcframework,估計這個問題就能屏蔽掉了。
原文鏈接:https://blog.csdn.net/guoyongming925/article/details/114628455