【问题标题】:F# use managed DLL with included .so fileF# 使用包含 .so 文件的托管 DLL
【发布时间】:2019-12-23 22:29:55
【问题描述】:

我正在尝试使用包装非托管 .so 的第三方托管 DLL,但我不知道如何在 Mac OS 上避免 System.DllNotFoundException

这个库有两个文件

  • managed_wraper.dll
  • unmanaged_library.so

如果我在一个 linux 机器上放置 .so 并且输出文件夹中的 DLL 可以正常工作,那么在 Mac OS 上就不能正常工作。我也无法让任何平台与 Jupyter 一起使用。

我为 Mac OS 上的 CLI 应用尝试了什么

我什至不知道从哪里开始使用 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

【问题讨论】:

  • 你有macos相关的.dylib文件吗? Macos 使用的是 dylibs,而不是 so 或 dll 文件,所以如果你想在 macos 上使用原生库,你的库需要捆绑一个。

标签: macos .net-core f# mono


【解决方案1】:

哇,我不喜欢电脑 :) 所以这就是 CLI 应用程序的工作原理

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

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

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

在任何一种情况下,您都必须将包装 DLL 复制到输出文件夹。也许dotnet 只加载.dylib,但我已经看到你可以在Mac OS 上使用.so 文件的地方。请高人赐教

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多