Исключение: System.DllNotFoundException - вызывать функции CoolProp (родная библиотека C ++) с .NET Core 2.1 - PullRequest
0 голосов
/ 19 октября 2018

У меня есть проект .NET, написанный на C #, который связан с библиотекой CoolProp (доступно здесь https://github.com/CoolProp/CoolProp).. Он вызывает функции CoolProp с помощью PInvoke.

К сожалению, мне нужно запустить эту программув среде Linux (именно AWS лямбда-env https://docs.aws.amazon.com/en_us/lambda/latest/dg/current-supported-versions.html).

На данный момент я хочу выполнить его с ядром .NET (команда dotnet run) на моем ПК с ОС Ubuntu, но я всегда получаю следующую ошибку:

Unhandled Exception: System.DllNotFoundException: Unable to load shared library 'libCoolProp.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibCoolProp.so.so: cannot open shared object file: No such file or directory at Test1.Program.PropsSI(String Output, String Name1, Double Prop1, String Name2, Double Prop2, String Ref) at Test1.Program.Main(String[] args) in /home/user/Desktop/TestDllInUbuntu/Test1/Program.cs:line 23

Программа тестирования:

using System; 
using System.Runtime.InteropServices;

namespace Test1 
{ 
    class Program 
    { 
        [DllImport("libCoolProp.so")] 
        private static extern double PropsSI(string Output, string Name1, double Prop1, string Name2, double Prop2, string Ref); 

        static void Main(string[] args) 
        {
            double propsRes = PropsSI("H", "T", 300.0, "Q", 0.0, "R410A"); 
            Console.WriteLine(propsRes); 
        } 
    } 
}

Program.cs находится в той же папке, что и libCoolProp.so.

Примечания:

  • Та же самая программа в Windows 10, скомпилированная и запущенная с .Net Core с ее libCoolProp.dll работами.
  • работает та же самая программа в Ubuntu 18, скомпилированная и выполненная с Mono Runtime .

Как решить проблему совместимости между CoolProp lib и .Net Core runtime?

1 Ответ

0 голосов
/ 27 октября 2018

Я нашел решение.

Сборка исполняемого файла ядром .NET находится внутри bin/debug/netcoreapp2.1/, поэтому достаточно связать библиотеку с правильным путем:

[DllImport("../../../libCoolProp.so")]

Этоне требуется для Windows 10, так как во время выполнения ядра .NET выполняется поиск dll внутри папки, в которой вызывается команда dotnet run.

Для получения дополнительной информации найдите проблему: https://github.com/dotnet/core/issues/2015

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...