【问题标题】:Trying to use Mpir.NET with F# on linux尝试在 Linux 上将 Mpir.NET 与 F# 一起使用
【发布时间】:2019-10-28 17:04:12
【问题描述】:

我想在 Ubuntu 18.04 上使用带有 F# (4.5) 的 Mpir.NET,在命令行上使用 dotnet。不成功。如果有更简单的方法在 F# linux 上使用 Mpir.NET,请指教。

遵循 dotnet 指令 https://docs.microsoft.com/en-us/dotnet/fsharp/get-started/get-started-command-line。 使用 Newtonsoft.Json 包的示例项目运行良好 当我构建一个项目来测试 Mpir.NET 时,我收到如下所述的错误。

dotnet new sln -o MpirProj
dotnet new console -lang F# -o src/App

将 src/App/Program.fs 替换为 Mpir.NET 文档中的程序:

open Mpir.NET

let a = 756749075976907490175905790287846502134Z
let b = 529134916478965674697197076070175107505Z
let c = a*b 
printfn "%O" c

 dotnet add src/App/App.fsproj package Mpir.NET

我收到以下信息/警告消息:

警告:使用“Mpir.NET 0.4.0”包恢复 '.NETFramework,Version=v4.6.1' 代替项目目标框架 '.NETCoreApp,版本 = v2.1'。此软件包可能不完全兼容 与您的项目。信息:包“Mpir.NET”与所有兼容 项目“src/App/App.fsproj”中的指定框架。信息: 包'Mpir.NET'版本'0.4.0'的PackageReference添加到文件 '/home/doug/f#favs/MpirProj/src/App/App.fsproj'。

dotnet sln add src/App/App.fsproj

生成的 App.fsproj 文件是:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Program.fs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Mpir.NET" Version="0.4.0" />
  </ItemGroup>

</Project>

进行构建

dotnet build

消息

/home/doug/f#favs/MpirProj/src/App/App.fsproj:警告 NU1701: 使用“Mpir.NET 0.4.0”包恢复 '.NETFramework,Version=v4.6.1' 代替项目目标框架 '.NETCoreApp,版本 = v2.1'。此软件包可能不完全兼容 与您的项目。应用程序-> /home/doug/f#favs/MpirProj/src/App/bin/Debug/netcoreapp2.1/App.dll

构建成功。

当我运行时,请参阅下面的错误消息

~/f#favs/MpirProj/src/App$ dotnet run

消息

/home/doug/f#favs/MpirProj/src/App/App.fsproj:警告 NU1701: 使用“Mpir.NET 0.4.0”包恢复 '.NETFramework,Version=v4.6.1' 代替项目目标框架 '.NETCoreApp,版本 = v2.1'。此软件包可能不完全兼容 与您的项目。 /home/doug/f#favs/MpirProj/src/App/App.fsproj : 警告 NU1701:包“Mpir.NET 0.4.0”已使用恢复 '.NETFramework,Version=v4.6.1' 代替项目目标框架 '.NETCoreApp,版本 = v2.1'。此软件包可能不完全兼容 与您的项目。

未处理的异常:System.TypeInitializationException:类型 'Mpir.NET.mpir' 的初始化程序引发了异常。 ---> System.Exception:MPIR:无法确定 xmpir.so 的路径 Mpir.NET.mpir.LocateLibrary(字符串名称)在 Mpir.NET.mpir.GetXMPIRLibraryPath() 在 Mpir.NET.mpir..cctor() 上的 Mpir.NET.mpir.initialize_hxmpir() --- 内部异常堆栈跟踪结束 --- 在 Mpir.NET.mpir.mpz_init_set_str(String str, UInt32 _base) 在 Mpir.NET.NumericLiteralZ.FromString(String s) 在 .$Program.main@() 在 /home/doug/f#favs/MpirProj/src/App/Program.fs:第3行

【问题讨论】:

    标签: .net ubuntu f# mpir


    【解决方案1】:

    您看到此问题是因为该软件包适用于 .NET Framework,但您是在 Ubuntu 上的 .NET Core 上构建和运行的。为兼容性而引用 .NET Framework .dll 仅适用于 Windows(如果它适用于其他地方,那基本上只是巧合)。

    我建议请求更新包以支持 .NET Core,或寻找与 .NET Core 兼容的替代方案。

    【讨论】:

      【解决方案2】:

      我在 windows 10 上尝试了 Mpir.NET,执行时间比使用 F# bigintegers 慢得多。
      我喜欢 F# 的很多方面,但 biginteger 速度很慢,而且似乎没有替代方案。

      我用 F# 解决 Pollard rho 分解问题的最佳时间是 28 秒。在 Ocaml(Windows 10、Ubuntu 和 Fedora)上使用完全相同的算法,经过的时间都是 10 秒。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-13
        • 2018-06-08
        • 2016-03-25
        • 2013-12-25
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多