.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环境基本就能解决现有周立功板卡上程序发布问题了。

posted @   猿妙不可言  阅读(1971)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示