.net8.0 AOT笔记
.net8 AOT笔记
近期。net8发布了第一个rc版本,刚好近期在做一些.net6下的一些程序验证,顺带试了下。
以x64为例
系统ubuntu22.4 x64
下载.net8 sdk
https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-8.0.100-rc.1-linux-x64-binaries
安装.net8
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-8.0.100-rc.1.23463.5-linux-x64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
测试安装配置是否成功
dotnet –info
进入代码project目录(不是sln目录,而是csproj目录)
常规发布命令
dotnet publish -r linux-x64 -c Release
AOT发布(-p:PublishAot=true 参数)
dotnet publish -r linux-x64 -c Release -p:PublishAot=true
如果报错,则需安装依赖
sudo apt-get install clang zlib1g-dev
ARM64环境搭建
注意下载ARM64的包
这边测试平台主要是高通410平台debian11、rk3568 Armbian (23.08.0-trunk),均为arch64环境
下载SDK路径
https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-8.0.100-rc.1-linux-arm64-binaries
安装SDK
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-8.0.100-rc.1.23463.5-linux-arm64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
常规发布命令
dotnet publish -r linux-arm64 -c Release
AOT发布(-p:PublishAot=true 参数)
dotnet publish -r linux-arm64 -c Release -p:PublishAot=true
如果报错,则需安装依赖
sudo apt-get install clang zlib1g-dev
注意事项:
发布出来的软件如果是在较高的linux中AOT编译出来的,则软件适用用范围为编辑环境的linux版本或更高版本,否则在低版本linux中可能因为依赖导致无法运行。
比如Armbian23.08上编译的AOT程序将无法运行到debian11中,提示GLIBC版本问题
./XxxSimulator: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./XxxSimulator)
./XxxSimulator: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./XxxSimulator)
所以AOT发布尽量选取最低支持的平台上进行,以便支持更多的运行平台
总结:
目前验证该方案能够正常执行,能极大提升启动速度,降低发布包的大小(压缩裁剪后12M->AOT 3M),减少内存占(压缩裁剪26.6M->AOT 6.7M),适合对启动速度有要求、程序体积、内存占用有限制的场景,且AOT提前编译字节码为机器码,也适合对代码安全有较高要求的场景。目前支持的AOT模式支持的程序类型有限,不支持wpf、winform程序,但.net8中AOT可以支持C调用,可以做混合编程实现重要部分模块AOT。
----------------------------
更新20250220
关于“Armbian23.08上编译的AOT程序将无法运行到debian11中,提示GLIBC版本缺失问题”,其实可以通过docker去构建一个低版本linux容器来搭建编译环境解决。
这边使用了ubuntu20.02的docker容器构建了低版本glibc运行环境,构建过程中主要需要注意容器环境的完整性,之前在证书那里卡了一阵(缺ca-certificates),后面回头装wget时,自带装入了ca-certificates包,所以就能正常通过编译了,这样这边armbian23环境基本就能解决现有周立功板卡上程序发布问题了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)