未找到 libSQLite.Interop Mac OS | M1

Lin*_*ane 8 .net sqlite-net apple-m1 .net-6.0

我在 M1 Pro 上使用 dotnet 6,并且正在努力使用 SQLite-Package。

System.DllNotFoundException: Unable to load shared library 'SQLite.Interop.dll' or one of its dependencies.

这是每当我尝试运行该应用程序时引发的错误。然而建筑工作正常。

zot*_*tan 8

我通过在我的 M1 macbook 上从源代码构建 Interop.dll 文件和 dotnet 库文件来解决这个问题。仅构建 Interop.dll 会导致 EntrypointNotFoundException。要构建该库,请从SQLite 网站下载源代码,在撰写本文时,这就是该文件sqlite-netFx-source-1.0.115.5.zip。提取它并运行该文件Setup/compile-interop-assembly-release.sh。要构建库,请dotnet build -c Release在System.Data.SQLite目录中运行。您的互操作文件将位于bin/2013/Release/bin. 我将其符号链接到/usr/local/lib/libSQLite.Interop.dll,但您也可以将其复制到项目目录中作为libSQLite.Interop.dll. 现在将引用添加到bin/NetStandard21/ReleaseNetStandard21/bin/netstandard2.1/System.Data.SQLite.dll您的项目中,它应该可以正常运行。

1.0.115更新:在撰写本文时,使用直接来自 NuGet 的过时版本也可以正常运行。

  • 这些步骤对我在 M1 mac 上运行的 linux arm64 ubuntu docker 容器上的 1.0.116 上非常有效。一些注意事项:在“System.Data.SQLite”目录中,我必须运行“dotnet build -c Release System.Data.SQLite.NetStandard21.csproj”(即指定项目);我运行以下命令来安装互操作库: `sudo cp ./sqlite-source/bin/2013/Release/bin/SQLite.Interop.dll /usr/lib/libSQLite.Interop.dll`; 我必须在项目中删除“System.Data.SQLite.Core”的“ProjectReference”,并将引用添加到已编译的“System.Data.SQLite.dll”。 (4认同)
  • 我还必须用 ` gccflags="-arch x86_64 -arch arm64"` 修改 `compile-interop-assemble-release.sh` 而不仅仅是 ` gccflags="-arch x86_64"` 无论如何,非常感谢您的回答,找不到任何解决方案:) (2认同)

Noe*_*oel 8

作为尚未针对 arm64 的 sqlite的解决方法,您可以使用 .net 6 x64 架构。

  • 从此处安装 .net 6 x64 。
  • 配置您的 IDE(或终端)以使用 .net x64。这会因 IDE 而异,但在 Rider 中:
    • 按CMD ,打开首选项
    • 导航到“工具集和构建”部分
    • 将 .NET CLI 可执行路径更改为/usr/local/share/dotnet/x64/dotnet

在此输入图像描述