【问题标题】:Windows DLL on Linux SystemLinux 系统上的 Windows DLL
【发布时间】:2010-12-31 10:40:41
【问题描述】:

我想知道您是否可以在 应用程序(任何编程语言)中加载 Windows 操作系统(例如 user32.dll)的 DLL Linux 操作系统。

DLL 将位于 Linux 文件系统上的目录中。

感谢您的帮助。

您好!

【问题讨论】:

  • 当然可以:fopen("user32.dll", "rb").问题是:你想用它做什么???
  • 我想使用具有特定(例如,user32.dll)DLL 的函数。
  • 那(直接)不可能。可能有使用 WINE 的方法。

标签: java c++ windows linux dll


【解决方案1】:

是的,您可以加载一个 DLL 并使用适当的包装库调用它的函数,但是如果 DLL 本身对不存在的平台有依赖关系,那么这从根本上是无用的。这种方法用于诸如闭源视频编解码器之类的东西,其中不存在(非平凡的)依赖关系。

当然,User32.dll 是操作系统的一部分,并且与许多 NT 内核函数有内在联系,这些函数在 Linux 中都不存在。 Wine 没有使用 Windows user32.dll,而是提供了自己的版本,提供了等效的功能。

加载 Windows 的 user32.dll 肯定没有用,因为它主要是对 Linux 下不存在的其他 DLL、进程(例如 CSRSS)和内核调用的包装。不过你可以加载和使用 Wine 的。

【讨论】:

    【解决方案2】:

    没有。架构是根本不同的。

    我注意到你的问题被标记为 C++。如果它是一个 .net DLL(使用 CLR 字节码构建),那么您可以通过在 Mono 下运行的应用程序引用它。

    【讨论】:

      【解决方案3】:

      如果你为它写一个包装器是可能的。这就是win32 codecs 在 Linux 上的工作方式。 Wine 也使用许多 DLL。

      【讨论】:

        【解决方案4】:

        您可能会为您的应用程序进行自定义 Wine 构建(home pageWikipedia page)。不过,我们在这里谈论的是锤子。 :-)

        【讨论】:

          【解决方案5】:

          DLL 是 Windows 的一种格式(即它是共享库概念的 MS 实现)。
          它不是 Linux 可以理解的格式。
          Linux 对动态库使用 ELF 格式。

          【讨论】:

            【解决方案6】:

            为什么要这样做?要执行使用该 DLL 的程序 (.exe)?在这种情况下,您需要在 Linux 机器上安装 Windows 模拟器,例如 wine

            【讨论】:

            • Wine 不是模拟器,它是一个兼容层。如果您不在 x86 或 amd64 架构中,则它不起作用。
            猜你喜欢
            • 2015-11-30
            • 1970-01-01
            • 2017-12-14
            • 1970-01-01
            • 1970-01-01
            • 2021-11-20
            • 1970-01-01
            • 1970-01-01
            • 2021-05-05
            相关资源
            最近更新 更多