.NET/SQLite在Ubuntu更新后无法加载libe_sqlite3.so的问题排查
问题根源与解决方案
核心原因
你遇到的问题本质是版本依赖不兼容:.NET 8.0.4版本的官方SQLite关联库(libe_sqlite3.so)是基于GLIBC 2.28编译的,但你的Ubuntu服务器系统的GLIBC版本低于2.28,导致动态链接库加载失败。
为什么恢复csproj历史版本没用?因为发布时使用的是本地开发环境的.NET 8.0.4 SDK,即使csproj回滚,SDK仍会拉取对应版本的依赖库,而非旧版本的低GLIBC要求库。只有服务器备份里的文件是基于.NET 8.0.2编译的,其依赖的GLIBC版本更低,所以能正常运行。
可行解决方案
1. 锁定.NET SDK版本为8.0.2
在项目根目录创建global.json文件,强制使用8.0.2版本的SDK进行编译和发布:
{ "sdk": { "version": "8.0.202", "rollForward": "disable" } }
然后在Rider中确认项目使用该SDK,重新发布即可。这样生成的依赖库会和之前正常运行的版本一致,适配服务器的GLIBC版本。
2. 改用静态编译的SQLite库
移除现有SQLitePCLRaw.bundle_e_sqlite3包,安装SQLitePCLRaw.bundle_static_sqlite3包——这个包是静态编译的SQLite,不依赖系统的GLIBC,能彻底规避动态链接的版本问题。安装后重新发布即可。
3. 升级服务器GLIBC版本(谨慎操作)
如果服务器允许,可以升级Ubuntu系统到19.04及以上(该版本默认GLIBC≥2.29)。不建议手动编译安装GLIBC,容易破坏系统依赖链,导致其他服务异常。
内容的提问来源于stack exchange,提问作者Etienne Charland
相关产品推荐
相关产品推荐

