由於其節電的特性、更長的電池壽命以及令人印象深刻的處理能力,加上 Windows on Arm 對於用於日益受歡迎的 AI 和機器學習工作負載的神經處理單元(NPU)支援,Arm 架構的裝置正在變得越來越受歡迎。
本指南將涵蓋針對由 Arm64 處理器提供之裝置,將支援新增至 Windows 應用程式的步驟。 指引還將涵蓋解決任何潛在問題或阻礙因素(例如第三方相依性或外掛程式),這些可能會干擾您為應用程式建立 Arm64 版本的方法。
針對 x86 或 x64 Windows 應用程式的 Arm 型裝置模擬
Arm 版本的 Windows 10 包含模擬技術,可讓現有的未修改 x86 應用程式在 Arm 裝置上執行。 Windows 11 擴充模擬,以在 Arm 支援的裝置上執行未修改的 x64 Windows 應用程式。
雖然在 Arm 裝置上模擬 x64 和 x86 的能力是向前邁出的絕佳一步,但本指南將協助您新增 Arm 原生支援,讓您的應用程式可以利用原生效能提升和 Arm64 支援裝置的獨特品質,包括:
- 將應用程式的耗電量優化,以延長裝置的電池使用時間。
- 將 CPU、GPU 和 NPU 的效能優化,以加速工作流程,特別是在使用 AI 時。
此外, 核心驅動程式 必須建置為原生 Arm64。 核心中沒有模擬。 這主要會影響虛擬化場景。 如需使用需要直接存取核心模式中執行之 OS 或硬體內部,而不是使用者模式的應用程式,以及尚未更新以支援 Arm64 處理器的應用程式,請參閱 使用 WDK建置 Arm64 驅動程式。
備註
漸進式網頁應用程式(PWA)將已經以原生 Arm64 效能執行。
先決條件
如果您要使用 Arm 型裝置來更新應用程式(原生編譯 - 為執行所在的相同平台產生程式代碼),您可以使用:
Visual Studio 2022 v17.4 或更新版本。 這是 Visual Studio 的第一個 GA 版本,原生支援在 Arm 型處理器上建置和偵錯 Arm64 應用程式。 Visual Studio 2022 17.4 和 Microsoft Visual C++ (MSVC) 原生 Arm64 版本,相較於舊版模擬版本,效能大幅提升。
(選擇性) LLVM (Clang) v12+ 或更新版本。 LLVM 12 新增了在 Windows 上運行的 Arm64 官方二進位版本,包含 Clang 編譯器、LLD 連結器和 compiler-rt 運行時庫。
如果您要更新 Windows 應用程式以支援使用 x64 或 x86 Intel 型裝置的 Arm(交叉編譯),您可以使用:
- Visual Studio 2022 v17.10 (建議)
- Visual Studio 2019 v16.x
- Visual Studio 2017 v15.9 及更新版本(UWP,桌面橋接,win32 C++)
- LLVM (Clang) v12+
在交叉編譯或原生編譯之間選擇時,有幾個因素需要考慮,例如可用的硬體和測試執行的簡單性。
備註
GCC,GNU 編譯程式集合 支援預計在不久的將來實現。
新增 Arm64 原生支援的步驟
若要更新您的應用程式以原生方式在 Arm64 上執行:
確認您的應用程式已成功針對 Arm 裝置進行優化之後:
步驟 1 - 在 Visual Studio 中將 Arm64 設定新增至您的專案
若要將具有偵錯和發行目標的新 ARM64 解決方案平臺新增至現有的 x64 或 x86 應用程式專案:
- 在 Visual Studio 中開啟您的方案(專案程式代碼)(請參閱支援版本 的必要條件 )。
- 在 [標準] 工具列的 [解決方案平臺] 下拉功能表中(或在 [建置] 功能表中),選取 [Configuration Manager...]
- 開啟 [使用中解決方案平臺] 下拉選單,然後選取 <新增...>。
- 在 [鍵入或選取新平台] 下拉選單中,選取 [ARM64],並確定 [複製設定來源] 值設定為 [x64],啟用 [建立新專案平台] 複選框,然後選取 [確定]。
祝賀! 您已開始將 Arm 支援新增至您的應用程式。 接下來,請檢查您的 Arm64 解決方案組建是否成功。
如果您的解決方案未成功建置,您必須解決導致建置失敗的問題。 最有可能的原因是某個相依性不支援 ARM64,詳細內容可參考下文中的 疑難排解。
(選擇性):如果您想要先確認您的應用程式二進位檔現在已針對 Arm64 建置,您可以在 PowerShell 中開啟項目目錄(在 Visual Studio 方案總管中以滑鼠右鍵按兩下您的應用程式專案,然後選取 [ 在終端機中開啟]。 變更目錄,以便選取您專案的新 bin\ARM64\Debug
或發行目錄。 輸入命令:dumpbin /headers .\<appname>.exe
(以您的應用程式名稱取代 <appname>
)。 在終端機的輸出結果中向上捲動以找到FILE HEADER VALUES
區段,並確認第一行是AA64 machine (ARM64)
。
步驟 2 - 測試和偵錯新建的 Arm64 應用程式
若要在 Visual Studio 中將 Arm64 解決方案平臺新增至您的項目之後,檢查您的 Arm64 解決方案組建是否成功:
- 關閉 [使用中解決方案平臺] 視窗。
- 將組建設定從偵錯變更為發行。
- 在 [建置] 下拉功能表中,選取 重建方案,並等候專案重建。
- 您會收到「全部重建成功」輸出。 如果沒有,請參閱下方的 疑難解答 一節。
一旦為您的應用程式建置二進位檔以支援Arm64,您就會想要測試它們。 這需要有在Arm上執行 Windows 的裝置或虛擬機。
如果您在 Windows on Arm 裝置上進行開發,那麼使用 Visual Studio 進行本機偵錯是非常簡單的設置方法。 如果交叉編譯(使用未在 Arm 處理器上執行的裝置),則您會想要在另一部裝置上執行 Arm64 應用程式時,在 Windows on Arm 裝置或虛擬機上使用遠端偵錯,以在 Visual Studio 中啟用開發體驗。
提供測試用的 Arm 硬體或虛擬機器上的 Windows
如果您要尋找硬體以用於持續整合(CI)和測試,以下是一些具有Arm64型處理器的Windows 裝置:
如需設定在 Arm 上執行 Windows 以支援 CI 和測試的虛擬機器(VM)的說明,請參閱 快速入門:在 Azure 入口網站中建立 Arm 虛擬機上的 Windows。
閱讀有關 使用 Arm 架構的 Ampere Altra 處理器的 Azure 虛擬機,正式發佈的 Azure 部落格公告,該虛擬機可執行 Arm64 架構的 Windows 11 專業版和企業版。
深入瞭解使用 Hyper-V 和 Windows 測試人員 VHDX,在 Arm 架構的 VM 上建立本機 Windows 11 的 Windows 11 on Arm Insider Preview (VHDX)。 *只有符合必要條件的裝置才支援Arm64 VM。 x64 硬體不支援建立 Arm64 VM - 您必須在雲端裝載 VM,請參閱上述快速入門連結。
步驟 3 - 在 Arm 裝置上建置及測試您的應用程式
新增測試自動化流程是持續整合和持續交付策略的重要考量。 針對在 Windows 上執行的 Arm64 解決方案,請務必在 Arm64 架構上執行您的測試套件 -- 這可能是 Arm 硬體上的實際 Windows,使用上面所列的其中一個 Arm 裝置,或上述 VM 中的虛擬機。
在與測試相同的計算機上完成時,編譯應用程序更為方便,但在許多情況下並非必要。 相反地,您可以考慮擴充現有的建置基礎結構,以產生Arm64的交叉編譯輸出。
步驟 4 - 更新安裝程式併發佈更新的應用程式
如果您發佈至 Microsoft Store,一旦您遵循上述步驟建置了 Arm64 版本的應用程式,就可以在您的 合作夥伴中心 儀表板上,將剛建置的 ARM64 二進制檔案新增至提交中,來更新 Microsoft Store 中的現有應用程式套件。
如果您的應用程式尚未在 Microsoft 市集中發佈,您可以依照指示,根據您要提交 MSI 或 EXE、MSIX 套件、PWA 或應用程式附加元件, 建立應用程式提交 。
如果您建置自己的安裝程式,您應該確定它能夠成功安裝新的 Arm64 版本。 大部分的安裝程序架構,例如 WiX、Squirrel、InnoSetup、InstallAware,以及其他工具,均可支援 Arm 上的 Windows。
如果您從網頁提供應用程式的安裝程式,您可以使用 User-Agent 用戶端提示 來偵測客戶何時從 Arm 裝置上的 Windows 流覽,並提供更新的 Arm 原生版本應用程式。 不同於使用者代理程式字串,User-Agent 用戶端提示可讓您區分Arm上的客戶與 x86 裝置上的客戶。
步驟 5 - 規劃進行中的更新
既然您已發行 Arm64 版本的應用程式,您現在想要確保它保持更新的方式與其他應用程式版本相同。 最好讓版本和功能跨架構保持一致,以避免未來客戶混淆。
故障排除
可能會干擾或封鎖您新增現有 x64 或 x86 Windows 應用程式的 Arm64 版本常見問題包括:
有一個尚未為 ARM64 編譯的相依性正在阻礙您進行成功的建置
如果您因為依賴關係無法建置,不論是內部、第三方或開放原始碼庫,您必須尋找方法來更新該依賴關係以支援 ARM64 架構,或將其移除。
針對內部依賴項目,我們建議您重建以支援ARM64的依賴項目。
針對第三方依賴項,我們建議請求維護者重新構建以支持 ARM64。
針對開放原始碼相依性,請考慮檢查 vcpkg ,以查看是否有較新版本的相依性包含 ARM64 支援,您可以加以更新。 如果沒有可用更新,您可以考慮自行為套件新增 ARM64 支援。 許多開放原始碼維護人員都感謝這一貢獻。
Linaro 組織還與企業和開放原始碼社群合作,開發以 Arm 為基礎的技術軟體。 您可以透過 Linaro Service Desk 提出要求,以協助更新 Windows on Arm 上任何缺失的相依性套件支援。
請考慮使用 Arm64EC。 Arm64EC 版本的相依性可用來重建應用程式,同時仍使用 x64 版本的相依性。 Arm64EC 程式中的任何 x64 程式代碼,包括相依性的程式碼,都會在應用程式中的模擬下執行。 (在此案例中,無法使用 Arm64 版本的相依性。)
最後一個選項是移除和/或取代應用程式專案的相依性。
程式代碼是針對 Arm64 以外的特定架構所撰寫
- 必須修改 CPU 特定彙編或內嵌內建函數調用,以符合 Arm CPU 上的可用指令和函式。 如需指引,請參閱:在 C 或 C++ 程式碼中使用組合語言和內建函式。
您的應用程式依賴核心驅動程式
核心驅動程序 必須建置為原生 Arm64。 核心中沒有模擬。 這主要會影響虛擬化場景。 如需使用需要直接存取核心模式中執行之 OS 或硬體內部,而不是使用者模式的應用程式,以及尚未更新以支援 Arm64 處理器的應用程式,請參閱 使用 WDK建置 Arm64 驅動程式。
此外, Windows 上的驅動程式 必須建置為 Arm64,且無法模擬。 如需依賴尚未更新以支援 Arm64 處理器之軟體驅動程式的應用程式,請參閱 使用 WDK 建置 Arm64 驅動程式。
Windows on Arm 的工具鏈
除了本指南 必要條件 一節中共用的 Visual Studio 和 LLVM (CLANG)支援之外,Arm64 也支援下列工具和架構:
- .NET 7
- .NET 6 (LTS)
- .NET 5.0.8+
- .NET Framework 4.8.1
- clang-cl 編譯適用於 Windows 的 C++ 程式碼,並可直接替代 MSVC 編譯程式和連結器。 它仍然使用 MSVC 的標頭文件和函式庫,且與 MSVC 的 ABI 相容。
以及第三方架構,包括:
- 適用於 Windows 的 Qt、 Boost C++ 連結庫、 Bazel、開放原始碼組建和測試工具。
- 支援適用於 Arm 上 Windows 的 GCC 和 Mingw / GNU 工具鏈,在 Linaro進行中。
- 如需更完整的清單,請參閱 Windows On Arm (WOA) - Confluence (atlassian.net)。
需要協助嗎? 利用我們的應用程式保證服務
ARM 應用程式保證諮詢服務旨在協助開發人員建置針對 ARM 進行優化的應用程式。 這項服務是對我們現有承諾的補充:您的應用程式將會在 Arm 上的 Windows 上執行,如果您遇到任何問題,Microsoft 將會協助補救。 深入瞭解。