异常:System.DllNotFoundException - 使用 .NET Core 2.1 调用 CoolProp(本机 C++ 库)函数
Exception: System.DllNotFoundException - Invoke CoolProp (Native C++ library) functions with .NET Core 2.1
我有一个用 C# 编写的 .NET 项目,它依赖于 CoolProp 库(可在此处获得 https://github.com/CoolProp/CoolProp)。它使用 PInvoke 调用 CoolProp 函数。
不幸的是,我必须在 linux 环境中 运行 这个程序(准确地说是 AWS lambda 环境 https://docs.aws.amazon.com/en_us/lambda/latest/dg/current-supported-versions.html)。
现在,我想在我的 PC 上用 Ubuntu OS 使用 .NET 核心(命令 dotnet run
)执行它,但我总是得到以下错误:
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 运行time的兼容性问题?
我找到了解决方案。
.NET core构建的可执行文件在bin/debug/netcoreapp2.1/
里面,因此足以link正确路径的库:
[DllImport("../../../libCoolProp.so")]
对于 Windows 10,这不是必需的,因为 .NET 核心运行时在调用命令 dotnet run
的文件夹中搜索 dll
。
有关更多信息,请查看问题:https://github.com/dotnet/core/issues/2015
我有一个用 C# 编写的 .NET 项目,它依赖于 CoolProp 库(可在此处获得 https://github.com/CoolProp/CoolProp)。它使用 PInvoke 调用 CoolProp 函数。
不幸的是,我必须在 linux 环境中 运行 这个程序(准确地说是 AWS lambda 环境 https://docs.aws.amazon.com/en_us/lambda/latest/dg/current-supported-versions.html)。
现在,我想在我的 PC 上用 Ubuntu OS 使用 .NET 核心(命令 dotnet run
)执行它,但我总是得到以下错误:
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 运行time的兼容性问题?
我找到了解决方案。
.NET core构建的可执行文件在bin/debug/netcoreapp2.1/
里面,因此足以link正确路径的库:
[DllImport("../../../libCoolProp.so")]
对于 Windows 10,这不是必需的,因为 .NET 核心运行时在调用命令 dotnet run
的文件夹中搜索 dll
。
有关更多信息,请查看问题:https://github.com/dotnet/core/issues/2015