Sqlite在低版本Centos系统启动失败问题解决
背景:
本人开发的.net core web端程序,数据存储使用Sqlite实现,环境是.net core 6、centos 7
问题:
在服务器启动后,会提示找不到“e_sqlite3”或依赖库的错误,导致程序不可用
解决:
通过deepseek协助,找到原因是“是因为你的 CentOS 系统自带的 GLIBC 版本较低,而你的 .NET Core 程序依赖的 libe_sqlite3.so 文件是在一个更高 GLIBC 版本的环境下编译的。GLIBC(GNU C Library)是 Linux 系统中最核心的库之一,许多应用程序都依赖于它”
| 解决方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 使用 Docker | 安全、隔离性好,不影响主机系统,部署简单 | 需要学习 Docker 基本操作 | 强烈推荐大多数场景,尤其生产环境 |
| 降低 NuGet 包版本 | 相对简单,无需改动服务器环境 | 可能受限于旧版本功能,非根本解决方案,未来可能再遇兼容性问题 | 快速尝试,应用对 EF Core 版本不敏感 |
| 静态编译 | 分发简单,减少运行时依赖 | 可能增加二进制文件大小,需要工具链支持 | 适合需要简化部署的场景 |
| 升级系统 GLIBC | “根本”解决 | 极其危险,易导致系统崩溃,不推荐 | 仅建议在隔离的测试环境或深知后果的情况下尝试 |
我使用降低 NuGet 包版本
降低后引用如下:
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.4" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="7.0.20" />
浙公网安备 33010602011771号