『壹』 Mac m1的交叉編譯
最近剛從window轉到Mac系統,用Mac交叉編譯window程序時遇到一點問題。
Mac(編譯)系統
Window(編譯)系統
『貳』 Mac M1安裝php開發環境
去年年底,蘋果推出了新款的M1晶元的mac,最近剛好要換電腦,考慮對比再三,還是選擇了M1晶元的mac;剛拿到手以後,擔心會有軟體不兼容啥的,網上也推薦作為主力開發的筆記本的話,不推薦M1,但是現在已經完全配置好了開發環境,安全下車了。下面就來簡單介紹下安裝過程中的步驟:
注意:如果沒有安裝brew,需要先安裝brew,使用arch -arm64 brew install安裝
首先搜索是否包含想要安裝的mysql版本,如下圖:
此處選擇[email protected]這個版本,我本地已經安裝完成了
安裝完成後,需要添加環境變數,這樣才能在任何目錄下面直接打mysql訪問
先查詢有哪些php的版本,之前看網上說的M1,目前還不支持php7.3以下的版本,所有我安裝了php7.4
等待安裝完成後,可以開始部署項目了,由於我的項目是thinkphp框架開發的,而且用到了redis,所以,這邊需要先安裝redis依賴
安裝php redis依賴(此處使用pecl安裝,網上有很多使用編譯安裝的方法,那種方法比較麻煩,而且需要配置的地方比較多,pecl安裝的話,快捷方便)
這個安裝完成後,就只需要去nginx目錄下面配置項目文件就OK了。
其他的不多說,主要提一點,就是thinkphp框架,重定向那邊的配置,location裡面的配置需要修改下,如下圖:
修改完成後,重啟伺服器,還要重啟php-fpm,這個是關鍵
『叄』 Mac M1 monterey 搭建 php環境(不使用XAMPP)
轉:
https://getgrav.org/blog/macos-monterey-apache-multiple-php-versions
『肆』 在php5的類的定義中,如果方法m1能夠調用方法m2,但m2不能調用m1,那麼m1和m2應該符
關鍵詞private public 一個是私有方法一個是公共方法
『伍』 M1晶元Mac搭建前端開發環境
M1晶元出來了有一段時間了,各類軟體的兼容性已經跟進的差不多了,迫於 M1 實在太香,我的 M1 Macbook 也於本周到達了我的手上。在花費了兩三個小時搭建完開發環境後,立馬用它開始幹活了。這幾天的感受只有寥寥一語可以概括:太 TM 香了!太強了
作為一個前端開發者,我可以負責任的說前端開發的場景 M1 已經可以完全覆蓋,並且體驗非常好。目前我依賴的開發環境,並且已經跑在 M1 Mac 上的如下:適配 m1 的 Vscode Insiders 版本 + Node v15(on arm) + Node v14 (on intel) + Nvm + Cocoapods + Xcode + Flutter。可以看到,大前端這一套是完全能夠覆蓋的。
我在 github 的 issue 中經常看到有關於 m1 安裝環境的問題,為了幫助不願意翻 issue 的開發者,遂決定寫下這篇文章記錄前端環境的搭建問題。
我會從以下幾個步驟來記錄:
Xcode 是蘋果開發者工具,是一個功能非常強大的 IDE,可以用來開發蘋果應用,並且自帶了 git 環境, 並且有咱們後續依賴的 Xcode Command line tool , 先進入 app store 中安裝 Xcode。安裝好之後再進入後續步驟
如果你是一個 mac 老用戶,那自然不用我介紹什麼是 Homebrew 。若是你是一個新用戶,那麼請你一定要安裝 Homebrew ,並使用它來管理 Mac 中的各類環境依賴。通過👇的命令即可安裝 Homebrew
在終端中執行如下命令安裝 Homebrew,安裝 Homebrew 的時候,常常會因為網路問題導致安裝失敗,這個問題只能依賴大家自行解決科學上網了。
Nvm 是一個管理 Node 版本的工具,當項目多了以後,總會碰到需要切換 Node 環境的時候,所以推薦大家使用 Nvm 來安裝 Node。
若是你已經按上述步驟安裝好了 Homebrew,那麼你可以直接通過 Homebrew 的命令輕松安裝 Nvm
若是你不想使用 Homebrew 管理依賴,那麼用 👇 的 curl 直接安裝 Nvm 也是可以的
安裝好 nvm 後,需要將環境變數寫入我們的 shell 配置文件中。
如果你的默認 shell 的 zsh,那麼將環境變數命令復制進 .zshrc :
如果不使用 zsh,那麼將環境變數復制進 bash 中,通過如下命令創建 bash_profile,並且編輯 bash_profile。
最後將以下環境變數腳本 進 shell 配置文件中:
至此 Nvm 已經安裝好,可以嘗試在命令行中輸入 nvm,你可以看到 nvm 已經正常工作了。
接下來我們通過 nvm 來安裝 Node,我們先安裝適配了 M1 的 node 版本。
該命令運行完後,會執行很久,編譯 node ,大家耐心等就好了,大概需要 5-10 分鍾,就會提示安裝成功。再提醒一句,報任何錯誤,首先先檢查是不是網路問題,例如 443 、 connect timeout 等,如果是網路問題,建議科學上網。
安裝 Node 的部分寫的很簡單,因為按這個步驟,一般不會出問題。而當你用 nvm 嘗試去安裝 v14 及以下的 Node 版本時,大概率會報錯,而我們在工作中恰恰又可能依賴 v14 及以下的 lts 版本。那麼為什麼會報錯呢?究其原因還是因為低版本的 node 並不是基於 arm64 架構的,所以不適配 M1 晶元。在這里教大家兩個方法,就能成功安裝上低版本 Node。
在終端中,輸入:
通過這個命令可以讓 shell 運行在Rosetta2下。
之後你可以通過 nvm install v12 來安裝低版本 Node。
在此之後,您可以不用在 Rosetta2 中就可以使用安裝的可執行文件,也就是說,您可以將 Node v15與其他節點版本互換使用。
方法二就是通過 Rosetta2 來啟動終端,這樣通過 Rosetta2 轉譯到 x86 架構中執行安裝,也一樣可以安裝成功。
至此,我們的 M1 就已經完成了 git + 各版本 Node + npm 的搭建,完成這部分工作後,前端項目已經可以正常運行,各位買了 M1 Mac 的前端小夥伴又能愉快的幹活了。希望本文能夠幫助被 M1 的開發環境困擾過的您。
『陸』 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框架
『柒』 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帶入一個全新紀元。
『捌』 M1晶元打通藩籬,蘋果助推ARM勝利
文 羅寧
編 王一粟
又是一場被精準預測的蘋果春晚。
4月21日凌晨,原本要在三月舉辦的蘋果春季發布會姍姍來遲,雖說讓很多果粉等到花都謝了,但還是有不少讓人眼前一亮的新東西。
除了iPhone 12和Apple TV算是常規升級外,AirTag暗藏蘋果的小目標, 而其中最為關鍵的,就是搭載M1晶元的iMac和同樣配備M1晶元的iPad Pro都有了巨大變化 ,在甩開英特爾推出ARM架構自研晶元M1之後,蘋果M1晶元的產品線大家族一步步揭開了自己的神秘面紗,繼續吹響革命的號角。
蘋果的野心顯露無疑,從晶元到操作系統,再到生態圈,正在引領PC與移動生態實現大融合與大統一。
近幾年在華為、三星的手機和平板協同上也同樣有這樣的趨勢,Wintel聯盟進一步瓦解,ARM生態正在進一步擴張。
還記得那句iPad Pro宣傳語嗎? 「你的下一台電腦,何必是電腦。」 從昨晚發布會看,或許這次發布的iPad Pro才真正配得上這句話,原因無它,就在於iPad Pro從A系列晶元一躍升級到了M1晶元。
基於M1晶元的iPad Pro相比上一代CPU性能提升50%,GPU性能提升40%,盡管外觀沒有多大變化,但晶元的升級再一次將iPad Pro推向了最強平板電腦的寶座,也許應了那句老話,性能能夠打敗iPad Pro的只有下一代iPad Pro。
相比A系列晶元,M1晶元也為iPad OS與macOS的融合做好了准備。基於相同晶元架構,平板形態的iPad Pro和筆記本形態的MacBook Pro將會在應用生態上做到統一,也意味著 整個iOS生態的開發者可以更方便開發出跨平台的應用內容 , 不再需要為同一款應用設計基於X86和ARM架構的不同版本,完成了iPad Pro從過去的平板電腦向個人電腦的底層基礎變化。 現在說iPad Pro完全取代電腦或許還不太可能,但隨著越來越多應用將可以在iPad Pro上流暢運行,必將引起新一輪生態的變革。
這一動作其實是「一石二鳥」。一方面,iPad OS與macOS可以在更多交互上走向統一,使蘋果龐大的iOS生態惠及筆記本產品線;另一方面,也讓開發者擁有更方便的開發環境,持續壯大蘋果的應用生態優勢。
這個數字已經達到了此前蘋果推出的售價高達四萬元的Pro Display XDR顯示屏的效果,而這一次,蘋果把這項技術壓縮到了iPad Pro這塊12.9英寸、6.4毫米的機身中,帶來了目前所有移動設備中最強悍的屏幕表現,這也是在為更多專業人士加入蘋果移動生態做好准備。
蘋果還為iPad Pro增加了雷靂埠,按照官方說法,iPad Pro不僅能兼容現有的USB-C介面,還能直接連接Pro Display XDR顯示屏跑滿6K解析度,蘋果用這樣一種看似很自然的方式, 完成了iPad屏幕和Pro Display XDR屏幕的高度統一,這意味著過去一些需要龐大的Mac Pro能做到的事情,新的iPad Pro也能做到,用戶在所有蘋果設備上的體驗進一步達成統一。
除了M1晶元和mini-LED屏幕之外,蘋果還為iPad Pro加入了5G網路功能,5G網路的加入,不但實現了iPad Pro移動辦公的需要,也讓iPad Pro相比MacBook來說具有更多擴展性,比如直接通過iPad Pro進行網路直播,或者隨時隨地高速上網進行 游戲 和視頻會議,這一特性也方便用戶有針對性選擇蘋果設備。
所以,融合M1晶元,mini-LED顯示技術以及5G網路的iPad Pro不但為蘋果凝聚了更多開發者,吸引到需求更高的專業人士,也將iPad、Mac、iPhone之間的隔閡逐漸打通,也因此,蘋果還在昨晚帶來了全新的iMac電腦。
作為發布會上的重磅產品,從內到外重新構建的iMac不但成為蘋果改變桌面生態的又一重要武器,也承載了蘋果破舊立新,融合生態圈的野心。
去年推出M1晶元的MacBook Air、MacBook Pro以及Mac mini盡管外觀與前代產品毫無變化,但蘋果卻通過強悍性能以及超長續航,讓人們看到了M1晶元的無窮潛力,基於ARM架構開發的M1晶元無疑讓英特爾感受到了壓力。而蘋果也再接再厲,將這顆M1晶元用在了台式機iMac上,這一次給人帶來的是全新的驚喜。
基於M1晶元打造的iMac實現了過去從來不曾做到的輕薄,整體厚度均勻,只有11.5毫米,這樣的外觀看起來就像是一個巨大的iPad配上電腦支架,整體重量不到4.5kg,相比上一代iMac 5.48kg的重量直接減輕1kg,而且要注意到的是,這款24英寸的iMac,實際上是之前21.5英寸iMac升級版,重量降低的同時屏幕增大,使得體驗更進一步升級。
這種從設計上將iPad形態融合到電腦形態的思考顯然是蘋果有意為之。 當處理器都採用統一架構時,人們在不同蘋果設備上的交互必然更加統一, 而iMac在外觀上和iPad Pro邊界不再那麼明顯,讓人們使用時更加輕松自如,近幾年在華為、三星的手機和平板協同上也同樣有這樣的趨勢,但蘋果顯然是走的最快的一家。
搭載M1晶元的iMac電腦相比之前標配的21.5英寸iMac機型,其中央處理器速度提升85%,圖形處理速度提升2倍,無論是對於代碼編譯還是視頻編輯而言,處理運行起來都表現得更加出色,這一點早在去年M1版本的MacBook Air上就有所體現。
另一方面, 作為一款M1晶元的一體機,蘋果也將系統生態和英特爾時代做了切割,形成涇渭分明的兩條路。 在macOS Big Sur系統加持下,你不但可以使用系統轉譯過去的X86架構應用,更能運行各種iPhone以及iPad應用,盡管沒有觸摸屏支持,但 蘋果實際上早在iPad OS上就通過觸控板為這些應用打通了交互 ,過去iPhone、iMac、iPad之間的那堵牆正在慢慢消失。
ARM才是未來 ,基於M1晶元的iMac的變化可以說是全方位的,外觀上向iPad Pro靠攏,系統使用上也逐漸打通iOS生態。蘋果走出這一步的同時,其軟硬體生態的融合性進一步增強,從某種程度上說,iMac就是一個放在家裡的超大號的iPad Pro, iPad Pro就像是小型的iMac,不再有X86架構和ARM架構的區別,這樣當用戶選購蘋果產品時,只需要針對自己的使用場景就能做出選擇,而不再糾結於生態的區別。
智能手機和個人電腦的融合在近年來不斷加深,傳統的PC逐漸被改造,華為、三星、小米等廠商都通過自家手機和筆記本電腦打通了Windows系統與安卓系統的界限,而蘋果則一路狂奔,讓iOS、iPad OS、macOS從底層架構到應用生態上逐漸統一,其轉變之快,讓不少開發者十分看好。
前英特爾總裁雷尼·詹姆斯創業做新公司Ampere時就曾公開表示,Apple M1是ARM在客戶領域的「分水嶺」,數據中心將不可避免地轉向ARM。該公司高級副總裁Jeff Wittich提到,蘋果公司的M1將會吸引更多的人,並將開發人員從x86轉移到Arm。
不過凡事都有兩面性,在一些iOS開發者歡欣雀躍的同時,也有人對於M1晶元架構的統一不那麼高興。 由於M1晶元高度一體,使其開放特性進一步降低,Linux之父Linus Torvlds就談到Linux難以運行在蘋果M1晶元的筆記本上,因為蘋果的封閉策略,開源軟體開發者將沒有足夠的資源在Mac上開發Linux支持的驅動和操作系統。
這實際上給了其他ARM架構晶元以機會,也是Windows系統PC依舊不會被取代的原因。蘋果的封閉策略固然能夠吸引更多消費者加入,但基於Linux開發者的生態社區依舊十分強大且有生命力,Linux開源社區依然是這個世界持續向前的核心推動力之一,對於這些用戶而言,他們也許並不喜歡M1晶元的設備。
華為消費者業務CMO朱勇剛此前也對蘋果圍繞ARM架構展開的戰略也表示認同,並提到華為戰略和蘋果戰略是完全一樣的,盡管PC領域華為依然使用英特爾晶元,但基於ARM架構的華為麒麟系列晶元已覆蓋到手機、平板、電視等設備上,並計劃通過鴻蒙系統底層架構實現生態的進一步統一。截止2020年底,鴻蒙系統全球開發者超過180萬,預計今年年底將在華為手機上大范圍使用, 這也是ARM進一步趕超英特爾的契機。
伴隨M1晶元大家族產品的不斷亮相,蘋果打破PC和移動設備邊界的野心顯露無疑。這樣一步棋蘋果走了足足十年。從A系列晶元到M1晶元,蘋果打破了老舊的英特爾設下的結界,讓iPhone、iPad、iMac變成了可以相互支持的工具,似乎再沒有哪一家公司能如此成熟的完成這樣的轉變。
以此為突破口,蘋果也終於完成了從內到外的自主話語權,擺脫英特爾的晶元桎梏,蘋果將有機會設計出更符合自己思路的產品。這一點我們在本次全新iMac上就能看出,而蘋果每一次發布會上都會提到的AR、AI技術等應用場景,在愈發強大的M系列晶元之下都更加游刃有餘。
這不僅是蘋果的勝利,也是ARM的勝利,因為蘋果、華為的推動,ARM陣營將會進一步壯大。此前微軟推出ARM架構Surface電腦時成績並不理想,但當蘋果作為變革者推動這一進程之後,微軟也許有機會借這股東風再次嘗試吸引開發者,華為鴻蒙系統或許也能從中受益。
接下來該期待的,就是六月的圍繞軟體和系統的蘋果開發者大會。