【问题标题】:Running 32-bit dll on 64-bit machine in java用java在64位机器上运行32位dll
【发布时间】:2012-11-07 01:51:29
【问题描述】:

我正在尝试将第 3 方 dll 用于我用 java 编写的程序。不幸的是,它只支持 32 位。当我尝试在 64 位 VM 中加载 dll 时,出现以下错误:

Can't load IA 32-bit .dll on a AMD 64-bit platform

我尝试在 32 位 VM 中运行,该 VM 在 eclipse 中运行,但是当我导出项目时,我得到了同样的错误。请帮忙!

此致,本

【问题讨论】:

  • 您确定您在 Eclipse 之外使用了正确的 java 吗?尝试使用 java -version 来检查是否使用了正确的版本(32 位)。

标签: java dll 64-bit 32-bit


【解决方案1】:

您不能在 64 位 Hotspot JVM 中使用 32 位 DLL。它行不通。而且我不知道有任何其他支持 32 位 DLL 的 64 位 JVM。

确实,正如 Peter Lawrey 所指出的,这不仅仅是 JVM 的限制。没有主流操作系统允许以 64 位模式运行的应用程序加载和使用 32 位库。

您的选择是:

  • 切换到 32 位 JVM。 (您可以在 64 位操作系统上运行 32 位 JVM ...)
  • 将 DLL 移植到 64 位。
  • 切换到纯 Java 或具有 64 位 DLL 的替代库。

我尝试在 32 位 VM 中运行,它在 eclipse 中可以运行,但是当我导出项目时,我得到了同样的错误。

这只能意味着您正在运行一个 32 位 JVM 来在 Eclipse 中运行应用程序,以及一个 64 位 JVM 来在 Eclipse 之外运行应用程序。 (问题在于您如何运行应用程序,而不是如何导出它......)

【讨论】:

  • +1 我不知道有任何操作系统允许 64 位应用程序加载 32 位共享库。它不是 Java 的限制。
  • 经过一长串搜索后,我找到了这个问题和答案,说明我的代码为何失败。这解决了它。太感谢了。我今天学到了一些东西!
【解决方案2】:

从 64 位 JVM 使用 32 位共享库的唯一方法是运行额外的 32 位 JVM 并通过 RMI、JMS 或某种形式的消息传递访问它。

这是 64 位程序(不仅仅是 Java)的固有限制,它不能与 32 位库交换指针。

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 2011-08-08
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2015-06-20
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多