Manjaro Linux运行ASP.NET Core 6应用提示GLIBC符号未定义重定位错误如何解决
报错根因
该错误是编译环境与运行环境的GLIBC版本不兼容导致的:你构建ASP.NET Core 6应用的环境GLIBC版本远高于当前运行服务器的GLIBC版本,_dl_fatal_printf 属于GLIBC私有接口,跨大版本迁移时就会触发该链接错误。
可行解决方案
方案1:用独立部署模式重新发布应用(优先推荐)
独立部署会将.NET运行时和所有依赖项全部打包到发布包中,不依赖目标系统的GLIBC版本和.NET运行环境。
- 发布命令:
dotnet publish -c Release -r linux-x64 --self-contained true /p:PublishSingleFile=true
- 将生成的publish目录完整上传到服务器,直接运行目录下的可执行文件即可。
方案2:对齐编译、运行环境的GLIBC版本
如果要保留框架依赖部署模式,需要保证编译环境和运行环境的GLIBC版本一致:
- 先执行命令查看运行服务器的GLIBC版本:
ldd --version,第一行输出即为版本号 - 编译应用的环境(本地开发机、构建服务器)安装和运行环境同版本的Linux发行版,再重新构建应用即可。
方案3:适配低版本Linux系统
如果你的服务器GLIBC版本低于ASP.NET Core 6要求的最低2.23版本,可选择以下两种操作:
- 升级服务器系统到符合要求的发行版:Ubuntu 18.04+、CentOS 8+、Debian 9+
- 改用Native AOT模式发布应用,该模式编译出的可执行文件不依赖系统GLIBC:
发布命令:
注意:AOT模式存在部分API使用限制,发布前需检查应用代码兼容性。dotnet publish -c Release -r linux-x64 /p:PublishAot=true
方案4:临时测试方案
如果仅需临时验证应用功能,可直接使用Docker容器运行,打包时选用官方ASP.NET Core 6运行时镜像即可,无需修改宿主系统配置。
内容的提问来源于stack exchange,提问作者leukk
相关产品推荐
相关产品推荐

