2015-07-10 58 views
0

嗨,我试图从mathdotnet与单声道在Linux中使用Mkl本机提供商。Mono Mathnet MKL Nativer provider not found

我使用monodevelop并通过buildin NuGet包管理器安装了MathNet.Numerics和MathNet.Numerics.MKL.Linux-x64和-x86包。

当我尝试此代码时,我得到System.NotSupportedException:未找到MKL本机提供程序。

using System; 
using MathNet.Numerics.LinearAlgebra; 
using MathNet.Numerics.LinearAlgebra.Double; 
using MathNet.Numerics; 

namespace mdeveloptest 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Control.UseNativeMKL(); 

      Matrix<double> a = DenseMatrix.OfArray(new double[,] { {1,2,3}, {4,5,6}, {7,8,9}}); 
      Matrix<double> b = DenseMatrix.OfArray(new double[,] { {1,2,3}, {4,5,6}, {7,8,9}}); 

      Console.WriteLine (a*b); 

     } 
    } 
} 

MKL包提供了libiomp5.so和MathNet.Numerics.MKL.dll文件。在Windows中,将这些文件复制到输出目录就足够了,但在linux中似乎不够用。

我也不确定我是否需要x64或x86软件包,或者单声道莫名其妙地可以自己选择合适的软件包。

回答

0

您正在使用什么版本的Math.NET Numerics?从v3.6开始,它应该在输出文件夹中显式查看,即使在Linux上也是如此。您还可以设置Control.NativeProviderPath以使其看起来另一条路径。是的,如果你把这两个文件夹放在x64x86子文件夹中,它会自动选择一个。有关详细信息,请参阅我们的documentation for Intel MKL

当然,您也可以将其设置为共享库,使用ldconfig的Linux方式,请参见Linux Interop with Native Libraries

+0

喜,THX的帮助。我正在使用mathnet v3.7。我试着把Control.NativeProvierPath,ldconfig放到/ lib,然后把ibiomp5.so和MathNet.Numerics.MKL.dll复制到包含.exe文件的文件夹中。除了设置LD_LIBRARY_PATH变量之外,没有任何工作。 – Robert

0

Linux的ldconfig需要知道哪里可以找到共享库(* .so),即使它们位于可执行文件的当前目录中。如果你在哪里运行从cmd,然后所有的文件这种单应用程序(EXE,DLL和SOS)是在当前目录下,你会:

export LD_LIBRARY_PATH=${PWD}:$LD_LIBRARY_PATH 
mono mdeveloptest.exe 

在MonoDevelop中/ Xamarin工作室:

  1. 开放项目选项
  2. 转到运行/常规面板
  3. 添加环境变量,

Variable  | Value 
LD_LIBRARY_PATH | ./ 

FYI:我已经使用$ {PWD}为XS/MonoDevelop的ENV VAR和他们得到正确的外壳扩展,这可能是他们被引用的字符串的方式。由于海报必须使用“./”,我更新了答案。仅供参考:OS-X的dyld默认包含当前目录,因此在这种情况下不需要设置DYLD_LIBRARY_PATH。

附加信息:

机汇编解决在Linux非常不同的比在Windows, 干脆把本地库到与 可执行文件相同的文件夹是不够的。安全的方法是编辑/etc/ld.so。conf和 使用ldconfig来告诉在哪里寻找库。 或者 您可以将路径添加到LD_LIBRARY_PATH甚至只是将它们复制到 /usr/lib。

+0

thx很多,设置LD_LIBRARY_PATH变量finaly为我工作。在monodevelop中,这个值似乎没有被解释,那里的变量被设置为字符串“$ {PWD}”。将其设置为“./”然后工作。也不知何故使用ldconfig没有为我工作 – Robert

+0

没问题,我用“./”回复更新了答案,希望下一个人找到答案。 – SushiHangover