首页 > 解决方案 > 从 CentOS 中单声道下运行的 .NET 应用程序调用本机 linux 库时,IL 代码无效

问题描述

我正在尝试在多平台环境中使用英特尔 MKL 库。我的 DllImports 和包装类在 .NET/Windows 下工作。但是,当我将它移植到 CentOS 时,我得到“无效的 IL 代码”。

我已更改 DLLImports 以包含 MKL 的 linux 版本(一个 .so 库)。我添加了 LD_LIBRARY_PATH 环境变量。尽管如此,无论库是否存在,错误都不会改变。而且我没有收到 DLLNotFound 错误,我收到了无效的 IL 错误。

下面我粘贴我的窗口,工作 dllimport 语句。

[DllImport("mkl_rt.dll", ExactSpelling = true, SetLastError = false, CallingConvention = CallingConvention.Cdecl)]
    internal static extern int DftiCreateDescriptor(
        ref IntPtr handle_descriptor,
        int precision,
        int domain,
        int dime,
        int size
    );

现在这就是我想出的 linux

[DllImport("libmkl_rt.so", CallingConvention = CallingConvention.Cdecl)]
    private static extern int DftiCreateDescriptor(
        ref IntPtr handle_descriptor,
        int precision,
        int domain,
        int dime,
        int size
    );

标签: .netlinuxmonodllimport

解决方案


最终,这通过不使用 __arg_list 并使用 Mono “.config” 文件来解决


推荐阅读