m1晶元能編譯x86嗎
1. M1 設備的 Xcode 編譯問題深究
在Apple發布M1晶元之前,一直使用Intel的晶元,沒有出現什麼問題。發布M1晶元後,由於兩者架構的不同(M1是arm64架構,Intel是x86_64的架構),導致很多軟體運行出現了問題。我們在M1機型中使用Xcode編譯模擬器時,可能會碰到如下報錯:
或
這些報錯,都是是由於項目中存在.a或.framework靜態庫導致的。以前,我們創建靜態庫時,會分別打包出一份針對真機(arm64)和模擬器的(x86_64),然後將這兩份合並成一個包後引入項目中進行使用。在Intel機型上,真機上使用arm64指令,模擬器(x86_64)中使用x86_64指令,所以不存在問題。但是在M1機型上,模擬器是以arm64運行的,顯然再以x86_64運行就會出現問題。
對於這類架構報錯問題,網上的資料一般會告訴你兩個解決方案:
以Rosetta模式運行Xcode。
修改Build Settings -> Excluded Architectures選項,添加Any iOS Simulator SDK選項,並設置值為arm64。圖示如下:
這兩種方案都能解決編譯問題,但是也都存在問題。
以Rosetta模式運行是M1機器上x86軟體無法運行的解決方案,它會將x86指令轉譯成ARM指令運行,這種轉譯顯然是存在性能損耗的,損耗大概在20%~30%,不到萬不得已,不推薦使用這種方案。
Excluded Architectures方案說明
修改Excluded Architectures選項也有它的問題。字面意思是排除架構的意思,我們設置在模擬器中排除arm64就能解決模擬器無法編譯arm64的問題。
這樣的設置能生效會讓人有點費解,我們知道,在intel機型上,模擬器本來就是以x86方式運行的,排除arm64毫無影響。但是在M1機型上,模擬器是以arm64方式運行的,排除了arm64反而能跑,這不是把我的智商摁在地上摩擦么?,但是蘋果就是這樣乾的,當在M1機型上,排除了模擬器的arm64架構後,模擬器還是會以arm64的方式運行,但是模擬器中的app是以x86的方式運行的,對蘋果的這個騷操作我們不得不服。圖示如下:
有時候在Excluded Architectures選項中排除了模擬器的arm64指令,依然無法編譯通過,那麼一般是項目設置和cocoapods的設置不一致導致,設置為一致後一般可以解決問題。可以通過在Podfile中添加如下內容來解決:
通過上述內容,我們知道了問題的由來,它是由於項目中存在.a或.framework,它們提供的指令集不完整導致的。Apple對於這類問題,也提供了解決方案,請由我細細道來。
以Xcode13為例,在我們創建靜態庫時,選擇真機編譯出來的包只包含arm64指令,選擇模擬器編譯出來的會同時包含arm64和x86_64指令。我看一些網上的教程,教別人將模擬器部分的arm64移除,其實大可不必。因為要支持M1機器正常跑模擬器,模擬器必須同時包含arm64和x86_64指令。
2019年的WWDC,apple提供了一種新的框架封裝格式XCFramework。簡單理解就是以前使用lipo合並不同指令集的包,現在則使用新的指令合並成XCFramework格式
打包成framework,格式如下:
打包成XCFramework後,格式如下:
從上述可以看出,XCFramework就是把兩個不同指令集的framework放入了同一個文件夾(.xcframework),並生成了一個配置文件Info.plist。這樣生成的XCFramework就可以完美的解決M1機器無法編譯模擬器的問題。
XCFramework的創建指令也很簡單:
以現在的情況,很多第三方框架,並沒有使用XCFramework,而項目中只要有一個框架沒有支持模擬器的arm64指令,那麼在M1機器上,模擬器只能以Rosetta模式運行應用,對這一塊的普遍支持估計要等M1普及以後了。
蘋果換芯,成了開發者們的噩夢?
armv6、armv7、armv7s、armv8、armv64及其i386、x86_64區別
細說iOS靜態庫和動態庫
關於Xcode11的XCFrameworks框架
2. m1晶元支持python第三方庫嗎
m1晶元是支持python第三方庫但是可以不能完美運行。
M1晶元是ARM架構,R語言、SQL、Python等使用非常廣泛的語言是支持的,不過有可能需要自己進行編譯安裝,或者是調試;但是第三方庫就不一定能夠完美支持M1晶元了。
M1晶元畢竟是蘋果第一代產品,是一個試水之作,肯定有很多的缺陷,還有需要改進的地方,這也是蘋果保留了intel產品的原因。目前涉及專業的領域,一律仍然推薦x86架構,穩定可用是第一要務。
Apple正式發布的M1晶元,它是Apple全新打造的強大晶元,也是第一款專為 Mac 設計的晶元。M1晶元專門針對Mac系統在小尺寸和高能效上的嚴格要求而優化。
作為一款SoC晶元,M1將眾多強大技術集於一身,並且採用統一內存架構,為性能和能效帶來巨大的提升。
M1也是Apple首款採用先進5納米製程打造的個人電腦晶元,封裝了驚人的160億個晶體管,其數量為Apple所有晶元之最。
這款低能耗晶元搭載了我們最快的中央處理器核心,擁有卓越的中央處理器性能功耗比;配備了我們最快的個人電腦集成顯卡。
它的Apple神經網路引擎更帶來了突破性的機器學習性能。得益於此,M1晶元將中央處理器速度提升至最高3.5倍,將圖形處理器速度提升至最高6倍,將機器學習的速度提升至最高15倍。
而且在實現這一切的同時,還將電池續航時間最高提升至上一代 Mac 機型的2倍。這些性能和能效上的躍升,意味著M1晶元將Mac帶入一個全新紀元。