Попытка использовать Mpir.NET с F # на Linux - PullRequest
1 голос
/ 28 октября 2019

Я хочу использовать Mpir.NET с F # (4.5) в Ubuntu 18.04, используя dotnet в командной строке. Не успешный. Если есть более простой способ использования Mpir.NET в F # linux, пожалуйста, сообщите.

Следуйте инструкциям 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

Я получаю следующее сообщение с информацией / предупреждением:

warn: пакет 'Mpir.NET 0.4.0' был восстановлен с использованием '.NETFramework, Version = v4.6.1'целевой платформы проекта .NETCoreApp, версия = v2.1. Этот пакет может быть не полностью совместим с вашим проектом. информация: Пакет 'Mpir.NET' совместим со всеми указанными фреймворками в проекте 'src / App / App.fsproj'. информация: PackageReference для пакета 'Mpir.NET' версии '0.4.0' добавлен в файл '/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, версия = 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: Package 'Mpir. NET 0.4.0 'была восстановлена ​​с использованием .NETFramework, Version = v4.6.1' вместо целевой платформы проекта '.NETCoreApp, Version = v2.1'. Этот пакет может быть не полностью совместим с вашим проектом. /home/doug/f#favs/MpirProj/src/App/App.fsproj: предупреждение NU1701: пакет «Mpir.NET 0.4.0» был восстановлен с использованием «.NETFramework, версия = v4.6.1» вместо целевой структуры проекта».NETCoreApp, Version = v2.1. Этот пакет может быть не полностью совместим с вашим проектом.

Необработанное исключение: System.TypeInitializationException: инициализатор типа для «Mpir.NET.mpir» вызвал исключение. ---> System.Exception: MPIR: невозможно определить путь к xmpir.so в Mpir.NET.mpir.LocateLibrary (имя строки) в Mpir.NET.mpir.GetXMPIRLibraryPath () в Mpir.NET.mpir.initialize_hxmpir() в Mpir.NET.mpir..cctor () --- Конец внутренней трассировки стека исключений --- в Mpir.NET.mpir.mpz_init_set_str (String str, UInt32 _base) в Mpir.NET.NumericLiteralZ.FromString (Strings) at. $ Program.main @ () в /home/doug/f#favs/MpirProj/src/App/Program.fs:line 3

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Вы видите эту проблему, потому что пакет предназначен для .NET Framework, но вы собираете и работаете на .NET Core в Ubuntu. Ссылка .NET Framework .dll для совместимости работает только в Windows (если она работает в другом месте, это просто случайность).

Я рекомендую запросить обновление пакета для поддержки .NET Core или найти .NET Core-совместимая альтернатива.

0 голосов
/ 03 ноября 2019

Я пробовал Mpir.NET в Windows 10, и время выполнения было намного медленнее, чем при использовании F # bigintegers.
Мне нравится много вещей в F #, но bigintegers просто медленны, и, похоже, нет альтернативы.

Лучшее время, когда я столкнулся с проблемой факторизации Полларда с F #, составило 28 секунд. При использовании точно такого же алгоритма в Ocaml (Windows 10, Ubuntu и Fedora) для всех из них прошло 10 секунд.

...