【问题标题】:How to fix 'cannot open shared object file: No such file or directory' error?如何修复“无法打开共享对象文件:没有这样的文件或目录”错误?
【发布时间】:2018-02-09 11:49:09
【问题描述】:

我正在尝试在带有单声道的 ubuntu Docker 容器中运行 C# 应用程序。该应用程序在 Windows 环境中正常运行。我只是将所有目录复制到 docker 卷。

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

msbuild CSharpSampleLSV2.csproj /t:Rebuild /p:Configuration=Release /p:Platform="x86"

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

MONO_LOG_LEVEL=调试单声道 CSharpSampleLSV2.exe

我遇到了一些类似这样的错误:

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

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

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

【问题讨论】:

  • 很可能 P_LSV2 是为 Windows 编译的本机库。如果你想在 linux 上进行 pinvoke - 你需要为 linux 编译的库(我的意思不是 .NET 库,而是本地库)。
  • @Evk 你不能在单声道窗口中使用本机库吗?有什么办法可以做到吗?谢谢

标签: c# linux mono


【解决方案1】:

P_LSV2.DLL 库的扩展“.dll”在异常提示中提到,这是您也尝试 pinvoke 的特定于 Windows 的本机库(DllImport 建议 pinvoke)。 Linux 本机库几乎总是有扩展名“.so”。因此,当您在 linux 上时,您正试图从为 windows 编译的本机库中调用某些东西 - 这不会起作用。

.NET 编译为 IL(中间语言),然后该语言在运行时编译为该代码正在执行的平台的本机代码。与此相反 - 本机库包含已为目标平台编译的代码。所以在linux上使用为windows平台编译的原生库是不可能的。

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

【讨论】:

    猜你喜欢
    • 2022-11-15
    • 2018-01-03
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2015-04-12
    • 2018-11-26
    相关资源
    最近更新 更多