【问题标题】:Cannot load 64-bit SWT libraries on 32-bit JVM (even though I downloaded 32-bit SWT)无法在 32 位 JVM 上加载 64 位 SWT 库(即使我下载了 32 位 SWT)
【发布时间】:2014-02-24 00:51:12
【问题描述】:

我目前正在 64 位 Windows 7 机器上进行开发。我的机器上安装了 JRE7 64 位和 JRE7 32 位。我正在使用 Eclipse 64 位版本并配置了 Window - Preferences - Java - Installed JREs 以使用 JRE7 32 位作为我要测试的默认 JRE。还安装了 32 位 JDK,目前正在使用它进行测试。

我仔细检查并确保我确实在使用 SWT 32 位 Windows,但在编译期间它仍然向我抛出“无法在 32 位 JVM 上加载 64 位 SWT 库”错误。

错误清楚地表明 Eclipse 确实在使用 JDK7-32 位,但由于某种原因,SWT 库 (http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.3-201306052000/swt-4.3-win32-win32-x86.zip) 不是完全 32 位 o.O...

有什么想法吗?有什么解决方法吗?

仅供参考,将 JRE 切换到 64 位可以很好地编译程序,但我希望我的应用程序可以在 32 位和 64 位上运行。

这里是完整的例外:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:260)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:240)
    at org.eclipse.swt.internal.C.<clinit>(C.java:21)
    at org.eclipse.swt.widgets.Widget.<clinit>(Widget.java:107)
    at Test.Application.<init>(Application.java:19)a
    at Test.Application.main(Application.java:29)

【问题讨论】:

    标签: java eclipse x86 swt 64-bit


    【解决方案1】:

    SWT 使用插件片段来控制这一点 - 有一个 32 位片段和一个 64 位片段(以及用于 Mac、Linux 等的片段)。确保您的启动配置设置为使用正确的片段,具体取决于您在哪个 JVM 上运行它。

    请注意,仅包含“两个”插件片段将不起作用,因为它们都会尝试加载并导致问题。

    另外,this 相关问题可能很有用。

    另一个想法是深入研究loadLibrary 函数——据我记得它是如何工作的,它从某个临时位置查找 SWT dll 的缓存版本,因此它可能使用缓存的 64 -bit dll 而不是从 jar 中正确解压缩 32 位的。在这种情况下,删除缓存的可能会解决问题。

    不过,最简单的解决方案可能只是拥有两个独立的 Eclipse 实例:一个设置运行 32 位,一个设置运行 64 位。这样,您就不必担心来回切换,也不必担心配置太多。

    【讨论】:

    • 这可能是缺少的成分...您有示例代码或屏幕截图吗?因为我所做的只是下载了eclipse.org/downloads/download.php?file=/eclipse/downloads/…,将 swt.jar 添加到 Java Build Path - Libraries 并尝试执行我的示例 swt 项目。并遇到了上述错误。
    • 抱歉,暂时不能截图。您应该能够在“运行/调试配置”对话框的“插件”选项卡中找到启动配置中的插件列表(用于设置环境的主、参数、插件、配置等)。滚动列表并确保只为您正在运行的架构选择正确的 SWT。
    • 在编辑中添加了另一个想法 - 您可以并排 Eclipse 实例,无需“配置”您的 64 位版本以使用 32 位的东西,反之亦然。
    • stackoverflow.com/a/21077768/836214 可能也很有用——不过我自己还没有尝试过。
    • 很高兴听到。我将把这部分编辑到我的答案中,这样它就不会被埋没在 cmets 中。
    【解决方案2】:

    “我正在使用 Eclipse 64 位版本并配置了 Window - Preferences - Java - Installed JREs 以使用 JRE7 32 位作为我的默认 JRE 进行测试。”

    如何配置您的 Eclipse 以指向并使用完整的 32 位 jdk 而不是项目的 jre?

    【讨论】:

    • 仅供参考,问题根本不在于 JDK 或 Java。从错误信息来看,SWT-32 bit 并不是真正的 32-bit o.O
    【解决方案3】:

    在你的 Eclipse 中点击

    运行 -> 外部工具 -> 外部工具配置...

    在 JRE 选项卡中选择选项

    在与工作区相同的 JRE 中运行。


    这为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2012-12-07
      相关资源
      最近更新 更多