如何修复'无法打开共享对象文件:没有这样的文件或目录'错误?

时间:2018-02-09 11:49:09

标签: c# linux mono

我正在尝试在带有mono的ubuntu Docker容器中运行C#应用程序。应用程序在Windows环境中正确运行。我刚刚将所有目录复制到docker卷。

我可以使用以下命令构建应用程序,而不会出现错误或警告:

  

msbuild CSharpSampleLSV2.csproj / t:Rebuild / p:Configuration = Release   / P:平台= “86”

但是当我尝试使用以下命令运行应用程序时:

  

MONO_LOG_LEVEL = debug mono CSharpSampleLSV2.exe

我遇到了这样的错误:

  

单声道:DllImport错误加载库'P_LSV2.DLL':'P_LSV2.DLL:   无法打开共享对象文件:没有这样的文件或目录'。

我不明白为什么会出现这个错误。这些库位于与Windows环境相同的位置。

如果需要更多信息,我会提供。

1 个答案:

答案 0 :(得分:1)

在{0}中提到的P_LSV2.DLL库的扩展名“.dll”暗示这是您正在尝试对其进行pinvoke的特定于Windows的本机库(DllImport建议使用pinvoke)。 Linux本机库几乎总是具有扩展名“.so”。因此,当您使用Linux时,您正尝试从为Windows编译的本机库中调用某些内容 - 这不起作用。

.NET编译成IL(中间语言),然后该语言在运行时编译为本代码执行的平台的本机代码。与此相反 - 本机库包含已编译的目标平台代码。因此,在Linux上无法使用为Windows平台编译的本机库。

所以你需要在某处获取为linux编译的库。如果没有这样的版本并且源代码也不可用(从源代码中你可以尝试为linux编译,虽然这可能并不容易) - 你运气不好。