macOS Mojave下SQLitePCLRaw加载'e_sqlite3'共享库失败求助
解决方案:macOS Mojave下SQLite加载失败问题
针对你遇到的基于C# EF Core + SQLite的跨平台应用在macOS Mojave(10.14)上抛出System.DllNotFoundException找不到e_sqlite3的问题,以下是几个可行的解决方向:
1. 回退到兼容旧macOS版本的SQLitePCLRaw包
新版SQLitePCLRaw(如2.1.x及以上)可能已放弃对macOS 10.14的支持,建议回退到明确支持该系统的版本:
- 卸载当前的
SQLitePCLRaw.bundle_*系列包 - 安装
SQLitePCLRaw.bundle_green2.0.7版本(该版本明确兼容macOS 10.14) - 确保所有相关SQLitePCLRaw依赖包(如
SQLitePCLRaw.core、SQLitePCLRaw.provider.e_sqlite3)的版本与bundle包完全一致,避免版本不匹配导致的加载问题
2. 手动嵌入兼容旧系统的e_sqlite3库
如果回退版本无效,可自行提供适配macOS 10.14的libe_sqlite3.dylib:
- 下载或编译针对macOS 10.14 x64架构编译的
libe_sqlite3.dylib(确保最低部署目标为10.14) - 将该文件添加到项目中,设置复制到输出目录为“如果较新则复制”
- 在应用启动时,先设置库加载路径,再初始化SQLite:
// 设置DYLD_LIBRARY_PATH指向应用根目录 Environment.SetEnvironmentVariable("DYLD_LIBRARY_PATH", AppContext.BaseDirectory); // 初始化SQLite SQLitePCL.Batteries_V2.Init();
3. 切换使用系统自带的SQLite库
用户系统已安装SQLite 3.24.0(满足EF Core最低要求3.13.0),可直接复用系统库:
- 卸载所有
SQLitePCLRaw.bundle_*和SQLitePCLRaw.provider.e_sqlite3包 - 安装
SQLitePCLRaw.provider.sqlite3包(该包绑定系统自带的sqlite3) - 修改初始化代码为:
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); SQLitePCL.Batteries_V2.Init();
4. 确保应用编译包含x64架构
Mojave多运行在Intel芯片设备上,若应用仅编译了arm64架构,会导致库加载失败:
- 在项目文件(
.csproj)中添加RuntimeIdentifiers配置:<PropertyGroup> <RuntimeIdentifiers>osx-x64;osx-arm64</RuntimeIdentifiers> </PropertyGroup> - 发布应用时选择
osx-x64架构,或选择通用架构发布,确保在Intel设备上能加载对应的原生库
内容的提问来源于stack exchange,提问作者Champy
相关产品推荐
相关产品推荐

