F# 使用包含的 .so 文件的托管 DLL



我正在尝试使用包装非托管.so的第三方托管 DLL,但我无法弄清楚如何避免 Mac OS 上的System.DllNotFoundException

此库有两个文件

  • managed_wraper.dll
  • unmanaged_library.so

如果我在 linux 盒子上,将.so和 DLL 放在输出文件夹中可以工作,那么在 Mac OS 上则不起作用。我也无法让任何平台与Jupyter一起工作。

我在 Mac OS 上的 CLI 应用程序尝试了什么

  • 设置LD_LIBRARY_PATH、DYLD_LIBRARY_PATH、DYLD_FRAMEWORK_PATH DYLD_FALLBACK_LIBRARY_PATH
  • http://christoph.ruegg.name/blog/loading-native-dlls-in-fsharp-interactive.html
  • SO 页面太多,无法在此处链接
  • .so放在不同的地方~/Librarycurrent directoryoutput directory

我什至不知道从哪里开始使用 Jupyter,我可以让它找到带有#r的 DLL,但是当 DLL 试图找到.so时,一切都崩溃了。

软件版本

  • Mac OS 10.14.6
  • .NET 2.1.401 - Mac
  • Jupyter Core 4.6.1, Jupyter-notebook : 6.0.2

哇,我不喜欢电脑:)所以这是适用于 CLI 应用程序的方法

Linux CLIDLL.so复制到输出文件夹中

Mac OS CLI我不得不将.so重命名为.dylib然后,您可以:

  1. 将包装 DLL 和libray.so复制到输出文件夹,并将library.so重命名library.dylib
  2. libray.so重命名为library.dylib并设置DYLD_LIBRARY_PATH

在任一情况下,都必须将包装器 DLL 复制到输出文件夹。也许dotnet只加载.dylib但我已经看到了您可以在Mac OS上使用.so文件的位置。请有人启发我

最新更新