跨平臺交叉編譯 Native AOT
如何將.NET 應用程序發布到鴻蒙上,肯定是很多人感興趣的話題,目前.NET完全具備可以在OpenHarmony系統上運行的能力,.NET 現在有很多選項CoreCLR、Mono和NativeAOT。由于OpenHarmony的沙箱環境的限制,NativeAOT是最佳選擇。孫策同學經過幾個月的探索,他2024年12月14日在上海舉辦的.NET Conf China 2024 大會上和大家分享他的探索經驗和成果,OpenHarmony作為一個開源的操作系統,本身就具有強大的兼容性和擴展性。而Avalonia則是一個跨平臺的UI框架,能夠在不同的操作系統上提供一致的用戶體驗。將這兩者結合起來,簡直就是強強聯手!9月份寫的這篇文章《.NET 的 Native AOT 現在是什么樣的?》里已經有跨平臺交叉編譯NativeAOT的答案:使用 Zig 作為鏈接器和 sysroot,允許從 Windows 機器交叉編譯到 Linux-x64、Linux-arm64、Linux-musl-x64 和 Linux-musl-arm64。
NativeAOT(Native Ahead-Of-Time Compilation)是一種將 .NET 程序編譯成本地機器代碼的技術,以提高應用程序的性能和啟動速度。交叉編譯是指在一個平臺上為另一個平臺生成代碼的過程。例如,在 Windows 上為 Linux 生成可執行文件。
為了交叉編譯,你需要為目標平臺安裝相應的工具鏈。例如,如果你想為 Linux 交叉編譯,你需要在 Windows 上安裝 Linux 的工具鏈(如 GCC、Make 等)。這通??梢酝ㄟ^安裝 Windows Subsystem for Linux (WSL) 或使用其他工具如 MinGW 來實現。我們有了更好方法:這個項目的地址:https://github.com/CeSun/PublishAotCross。
使用步驟:
1、從zig官網:https://ziglang.org/download/下載并配置 Zig:將 zig-windows-x86_64-0.14.0-dev.2540+f857bf72e.zip 解壓并添加到 PATH。 這里要注意的一點是整個壓縮包的內容要完整,復制二進制文件,還要復制 lib 目錄,不然就可能發生找不到zig.exe 的錯誤,具體參考https://christophvoigt.com/notes/unable-to-find-zig-installation-directory-filenotfound/。
2、從https://releases.llvm.org/ 下載 LLVM 并將 llvm-objcopy 添加到 PATH,最簡單的就是把llvm-objcopy.exe 文件放到zig.exe 相同目錄下。
3、在項目中添加 PublishAotCross 的引用,具體可參考:https://github.com/CeSun/OpenHarmony.Avalonia 。
做好了上面的準備,就可以使用VS 的發布功能,下面的配置是使用新的 RID 發布項目,例如發布linux-musl-arm64 :
dotnet publish -r linux-musl-arm64
歡迎大家掃描下面二維碼成為我的客戶,扶你上云




浙公網安備 33010602011771號