Ubuntu 22.04终端运行.NET应用遇重定位错误求助
解决Ubuntu 22.04中Snap版.NET SDK 3.1运行时的GLIBC版本错误
错误信息
my-pc:~/git$ dotnet run --project test/src/test.api /home/mir/git/test/build/test.api/test.api: relocation error: /home/mir/git/test/build/test.api/test.api: symbol __pthread_key_create version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference
问题原因
Ubuntu 22.04预装的GLIBC版本为2.35,而Snap版.NET SDK 3.1的隔离环境未正确适配系统的高版本GLIBC,导致运行时无法找到旧版本符号定义,触发 relocation 错误。
解决方案
改用官方APT源安装.NET SDK 3.1(推荐)
- 移除Snap版.NET:
sudo snap remove dotnet-sdk - 添加微软官方APT源:
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb - 安装.NET SDK 3.1:
sudo apt update && sudo apt install dotnet-sdk-3.1 - 验证安装并重新运行项目:
dotnet --version dotnet run --project test/src/test.api
- 移除Snap版.NET:
临时环境变量 workaround
如果暂时无法切换安装方式,可通过设置LD_PRELOAD强制使用系统兼容的pthread库:LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 dotnet run --project test/src/test.api注意:此方法仅作临时应急,可能引发其他兼容性问题,不建议长期使用。
检查项目目标框架配置
打开项目的.csproj文件,确认目标框架设置为netcoreapp3.1:<TargetFramework>netcoreapp3.1</TargetFramework>避免误设置为更高版本导致的编译/运行兼容问题。
内容的提问来源于stack exchange,提问作者Mehran Khan
相关产品推荐
相关产品推荐

