.NET Core 8在Ubuntu 23.10中提示GLIBCXX_3.4.29缺失问题求助
执行dotnet ef database update进行数据库迁移时,出现以下错误:
Failed to load /usr/lib/dotnet/host/fxr/8.0.2/libhostfxr.so, error: /snap/core20/current/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/lib/dotnet/host/fxr/8.0.2/libhostfxr.so)
The library libhostfxr.so was found, but loading it from /usr/lib/dotnet/host/fxr/8.0.2/libhostfxr.so failed
- Installing .NET prerequisites might help resolve this problem.
已通过strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX确认系统存在GLIBCXX_3.4.29版本,且尝试过系统更新、升级及安装build-essential,问题仍未解决。
可行解决方法
1. 临时指定正确的库加载路径
执行命令前先设置环境变量,让dotnet优先调用系统的libstdc++库:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH dotnet ef database update
若需永久生效,将上述export命令添加到~/.bashrc或~/.zshrc文件中,再执行source ~/.bashrc(对应shell配置文件)使其生效。
2. 消除snap环境的库干扰
错误提示指向snap/core20的旧版库,可通过以下方式处理:
- 卸载snap版.NET,改用官方deb包安装:
sudo snap remove dotnet-sdk sudo apt remove dotnet* aspnetcore* sudo apt update sudo apt install dotnet-sdk-8.0 - 或替换snap的libstdc++链接为系统版本:
sudo mv /snap/core20/current/lib/x86_64-linux-gnu/libstdc++.so.6 /snap/core20/current/lib/x86_64-linux-gnu/libstdc++.so.6.bak sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /snap/core20/current/lib/x86_64-linux-gnu/libstdc++.so.6
3. 重装.NET Host组件
若Host组件损坏,尝试重新安装:
sudo apt install --reinstall dotnet-host-8.0
内容的提问来源于stack exchange,提问作者Igor Evdokimov

