【问题标题】:Failed to load the JNI shared Library (JDK)无法加载 JNI 共享库 (JDK)
【发布时间】:2011-11-13 05:28:42
【问题描述】:

当我尝试打开 Eclipse 时,弹出对话框指出:

无法加载 JNI 共享库“C:/JDK/bin/client/jvm.dll”`。

随后,Eclipse force 关闭。

我想说几点:

  • 我检查了该路径是否存在任何东西。它确实存在。
  • My Eclipse 和Java SE Development Kit 都是 64 位的。我检查了我的系统,它可以处理 64 位。
  • 我在 Google 和 StackOverflow 上搜索过这个问题,我找到的唯一答案是下载 JDK 和 Eclipse 的 32 位版本。

下载 32 位版本是我最后才想做的事情。
有什么建议可以解决这个问题?

【问题讨论】:

  • 令我惊讶的是,我的计算机上安装了 5 个左右的 Java。不仅如此,事实证明我是不小心下载了 32 位的 Eclipse。因此,我卸载了我拥有的所有 Java,删除了 Eclipse(Eclipse 没有“卸载”功能),并为我的机器下载了 Eclipse Classic 64-bit,以及 64 位 Java(请参阅 SPP 对该链接的回答)。跨度>
  • 另外:如果有人在“删除”他们的 Eclipse 时遇到问题(例如,无论您手动删除多少次或通过命令提示符删除该文件夹,该文件夹都不会消失),请尝试使用安全模式删除它命令提示符..我不知道为什么我必须这样做,但最终还是奏效了。
  • @MikeGates 我也有这个问题,使用了 LockHunter。讨厌。让这个工具在 Windows 上运行是太多的工作。
  • 嘿。如果您确实拥有以下所有软件的 64 位版本,请尝试删除“eclipse.ini”文件。为我工作:)

标签: java windows eclipse java-native-interface


【解决方案1】:

你需要一个64-bit 三重奏:

  • 64-bit 操作系统
  • 64-bit Java
  • 64-bit Eclipse

【讨论】:

  • 说明:想象一下本机代码 (DLL) 被加载到应用程序中。现在想象一个 32 位的函数想要调用一个 64 位的函数,或者类似的。与对齐和数据大小以及所有内容相同。我想我不必多说什么了=P
  • 正确!我的笔记本电脑在 x64 操作系统上运行,但我安装了 x86 JDK。刚刚安装了 x64 jdk,问题就消失了。谢谢。
  • 这个答案实际上并不完全准确。如果您在 64 位操作系统上,您确实不需要运行 64 位 JDK 和 64 位 Eclipse。 64 位操作系统也可以运行 32 位 Java + 32 位 Eclipse 的组合。 必须匹配的是JRE/JDK和Eclipse的苦涩。
  • @E-Riz 你是对的,正确的答案也可以是“采取 32 位日食!”。但这是一个好的答案吗?
  • @Tarik 是的,它的 2015 年,不幸的是,JBoss Tools 的可视化页面编辑器 (VPE) 多年来仍在等待 64 位升级。查看下面第二对的“工作对”答案。 JBoss Tools-Plug-in 绑定到您下载 Eclipse 的相同架构。所以 Eclipse(带有 JBossTools)必须是 32 位的,JDK 必须是 32 位的,操作系统可以是 64 位的。 64 位 Eclipse 目前不能与 JBoss Tools 一起工作。我记得一个名为 JBossIDE 的项目使用 Eclipse 工作,你应该使用它而不是在 Eclipse 中安装 JBossTools。 JBoss 真丢脸,Mozilla 也丢脸。
【解决方案2】:

操作系统、JDK 和 Eclipse 的工作配对:


  • 32-bit 操作系统 | 32-bit JDK | 32-bit Eclipse仅限 32 位
  • 64-bit 操作系统 | 32-bit JDK | 32-bit Eclipse
  • 64-bit 操作系统 | 64-bit JDK | 64bit Eclipse仅限 64 位

我安装了几个 JDK 和 JRE。

他们每个人在 PATH 变量中都有自己的条目,都或多或少地工作。

从 PATH 变量来看,有些安装完全没用,因为它们从未使用过。当然,如果需要,可以在 Eclipse 中手动引用“非活动”Java,但我从来没有这样做过,所以我真的不需要它们。 (至少当时我是这么认为的……)

我清理了混乱,卸载了所有当前的 Java,只安装了 JDK + JRE 1.7 64 位。

其中一个 Eclipse“安装”随后失败,Failed to Load the JNI shared Library 和一个相对于新安装的 JDK 的给定路径,它认为 jvm.dll 是。

失败的 Eclipse 是我所有 IDE 中唯一一个在我原本的全 64 位设置中仍然是 32 位版本的 IDE。

像经常提到的那样,在我的情况下,在 eclipse.ini 中添加 VM 参数是没有用的(因为我只有错误的 JDK/JRE 相关。)

我也无法找到如何检查这个 Eclipse 是 32 位还是 64 位版本(我无法在 Task Manager 中查找它,因为这个 Eclipse“安装”不会启动。而且由于我设置它已经有一段时间了,我也记不起它的版本。)

如果您使用较新的 JDK 和较旧的 JRE,您也可能会遇到麻烦,但更有可能出现 java.lang.UnsupportedClassVersionErrorIIRC

【讨论】:

  • 它应该只使用它在 Path 变量中的第一个 \bin
  • 嗯,这始终是个问题...... Oracle 文档说它只使用第一个,但也许其他的东西正在改变/已经到位并且正在工作。似乎它总是像那样奇怪。
  • 要检查哪个版本是 32 位或 64 位,打开 eclipse.ini 并查找使用的 equinox 启动器(例如 org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502 )
  • 我有这个错误组合。 64 位操作系统 - 32 位 JDK - 32 位 Eclipse,它不起作用。我用这个组合解决了这个问题:64 位操作系统 - 64 位 JDK - 64 位 Eclipse(仅限 64 位)。 %PATH% 变量已更新为指向 64 位 java 版本。实际上 %JAVA_HOME% 已经更新,因为这个变量被用于 %PATH% 变量值。
  • @ekinnear 的评论解决了我的问题。我不确定它为什么要在我的 windows/bin 文件夹中寻找 JVM.dll,但放置正确的路径似乎已经解决了它。
【解决方案3】:

确保您的 eclipse.ini 文件包含以下行。

-vm
C:\path\to\64bit\java\bin\javaw.exe

我的 eclipse.ini 例如:

-startup
plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.2.R36x_v20101222
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
-vm
C:\Program Files\Java\jdk1.6.0_32\bin\javaw.exe
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m

使用 64 位或 32 位的 OS 和 Eclipse 保持相同并配置 eclipse.ini

你的eclipse.ini文件可以在你的eclipse文件夹中找到

【讨论】:

  • 这样就解决了问题。我将-vm C:\Program Files\Java\jdk1.6.0_32\bin\javaw.exe 行添加到我的eclipse.ini 文件中,它启动得很好。感谢 +1 的帮助。
  • 这项工作正常,请检查您的 Java 版本,在控制台中运行 java -version 并检查这是否是 Eclipse 正在使用的版本
  • 我用我的 Java 6 SDK 做了这个,但它不起作用。我又试了一次,指向我的 Java 7 SDK,它成功了。我使用的是 Windows 8 64 位、Java 6 和 7(均为 64 位)以及 Eclipse Helios(32 位)。我准备卸载并重新安装 Eclipse 64 位,但似乎 java 7 SDK 包含一些新的智能,可以更好地运行 32 位应用程序。
  • 这行得通。但需要将 -vm 放在 ini 文件的顶部;至少在 -vmargs 或 --launcher.xxx 之前
  • 我错过了非常非常重要的一点。如果你像这样使用:“-vm C:\ProgramFiles\Java\jdk1.6.0_32\bin\javaw.exe”它永远不会工作正确的方式“-vm C:\Program Files\Java\jdk1.6.0_32\bin\ javaw.exe" -vm 后面的新行很重要。
【解决方案4】:

我有同样的问题

我通过从

安装 64 位 JVM 解决了这个问题

http://www.java.com/en/download/manual.jsp

【讨论】:

    【解决方案5】:

    此错误表示 Eclipse 的架构与 Java 运行时的架构不匹配,即如果一个是 32 位,另一个必须相同,而不是 64 位。

    最可靠的解决方法是在 eclipse.ini 中指定 JVM 位置:

    -vm
    C:\Program Files (x86)\Java\jdk1.7.0_55\bin\javaw.exe
    

    重要提示:这两行必须在 -vmargs 之前。不要使用引号;允许空格。

    【讨论】:

    • 嗨,我从前一段时间开始使用这个 .ini 设置,我应该将架构更新到 64 位还是可以忽略拥有不同架构的事实?谢谢
    【解决方案6】:

    另一种选择是:

    创建 Eclipse.exe 的快捷方式。打开快捷方式并将目标更改为:

    "C:\Program Files\eclipse\eclipse.exe" -vm "c:\Program Files\Java\jdk1.7.0_04\bin\javaw.exe"
    

    对于您的安装,请确保这些位置指向正确的 Eclipse 安装目录和正确的 javaw.exe 安装目录。

    (当然,Eclipse 和 Java 的 64/32 位版本需要相同。)

    【讨论】:

    • 不错的选择,但如上所述将其添加到 ini 文件中应该可以工作
    • 无需更改 .ini 文件。只需为 java 和 eclipse 使用 64 位组合
    【解决方案7】:

    我安装了多个版本的 Java,包括 Sun JDK 和 JRockit、32 位和 64 位等,并在全新安装 64 位 Eclipse for Java EE (JUNO) 时遇到了这个问题。

    有什么作用:

    Peter Rader 建议的 64 位三重奏:

    我在 64 位操作系统 (Windows 7) 上使用 64 位 Eclipse。

    我确保 Sun JDK 7 64 位是默认的 Java 版本。当我从命令行(cmd.exe)输入“java -version”时,返回了 Sun JDK 7 64-bit...

    java version "1.7.0"
    Java(TM) SE Runtime Environment (build 1.7.0-b147)
    Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
    

    这并没有解决我的问题。

    DID 的作用:

    按照 Jayesh Kavathiya 的建议,在 eclipse.ini 中添加 -vm 选项:

    我在 eclipse.ini 中添加了以下内容:

    -vm
    C:/apps/java/jdk7-64bit/bin/javaw.exe
    

    注意:

    我不必卸载我机器上的各种版本的 JDK 或 JRE。

    【讨论】:

    • 我也不必卸载 JDK,但我选择清理我的系统以消除未来的错误原因。我还提到了 VM 参数,并解释了为什么它们显然对我不起作用。您可以选择如何设置系统,具体取决于您真正需要什么。
    • 我不得不做这两件事,但添加 javaw.exe 行然后让我在 64 位上安装所有东西,无论如何。这取决于你应该向 android 支付多少业力惩罚。
    • 我已经开发了多年,并且没有对我的系统进行任何更改(我知道),Eclipse 抛出了这个错误。添加 -vm 选项为我解决了问题,无需更改任何其他设置或取消/重新/安装任何东西。
    【解决方案8】:

    对于缺少的jvm.dll文件,我们可以在eclipse.ini文件中提供dll文件的路径为

    -vm
    C:\Progra~1\Java\jdk1.6.0_38\jre\bin\server\jvm.dll
    

    这里删除路径中的任何空格和双引号很重要。 当我删除引号和空格时,它对我有用。

    我希望它对某人有所帮助。

    【讨论】:

    • 这对我有帮助,而不是 -vm javaw.exe
    【解决方案9】:

    我遇到了类似的问题。解决了以下问题。

    • 将 Eclipse 移动到 Program Files(而不是 Program Files (x86))。
    • 从“路径”环境变量中删除 32 位版本 Java 的路径。

    我安装了两个版本的 Java,但 Eclipse 一直在尝试使用 32 位版本。

    【讨论】:

      【解决方案10】:

      当然,您需要有兼容版本的 JDK 和 Eclipse,但您还需要在 eclipse.ini 文件中添加以下行:

      -vm
      yourdrive\java\bin
      

      将它们设为eclipse.ini 文件的前两行。

      【讨论】:

        【解决方案11】:

        正如许多人已经提到的那样,EclipseJava 都是 32 位与 64 位的问题。您不能混淆 32 位和 64 位。由于 Eclipse 不使用 JAVA_HOME,因此您可能必须在启动 Eclipse 之前更改 PATH 以确保您使用的不仅是适当版本的 Java,而且是 32 位或 64 位(或将 INI 文件修改为贾亚特指出)。

        如果您从公司共享安装 Eclipse,您应该确保您可以知道您正在解压缩的 Eclipse 版本,并解压缩到适当的 Program Files 目录以帮助跟踪哪个是哪个,然后更改 PATH(通过 (Windows) 控制面板 -> 系统永久更改或设置 PATH=/path/to/32 or 64bit/java/bin;%PATH% (如果您不想在系统和/或用户环境变量中设置它,可以创建一个批处理文件)。记住, 32 位在 Program files (x86) 中。

        如果不确定,只需启动 Eclipse,如果出现错误,请将 PATH 更改为 Java 的其他“位”版本,然后重试。然后将 Eclipse 目录移动到相应的 Program Files 目录。

        【讨论】:

        • 这显然是一个问题,因为这个页面目前有 700k 的浏览量......一年后显然没有解决方案,它不涉及为了让 IDE 运行而在环境变量中四处寻找!
        【解决方案12】:

        上面的答案让我非常着迷,以至于我决定试运行所有可能的 OS 组合,EclipseJVM 三重奏。无论如何,任何正在挖掘并阅读我的帖子的人,请检查以下热点(我是 Windows 7 用户)。

        1. 您了解 Program FilesProgram File (x86) 是两个不同的文件夹... x86 代表 32-位版本的程序,前者为64位版本。

        2. 如果你有多个版本的Java 安装了不同的位数和发布版本,这必然会发生在这么多开源IDEs、管理器、管理控制台上,最好的选择是设置 VM参数直接在eclipse.ini 文件中。如果你不这样做,Eclipse 会发疯并尝试搜索自己,这是不好的。

        【讨论】:

          【解决方案13】:

          或者,获取相同的“位”版本的JRE 和 Eclipse,然后使用以下目标创建一个新快捷方式(替换已安装的 JRE 和 Eclipse 位置/路径):

          "C:\studio\eclipse.exe" -vm "C:\Program Files\Java\jre7\bin\server\jvm.dll" eclipse.vm="C:\Program Files\Java\jre7\bin\server\jvm.dll" java.home="C:\Program Files\Java\jre7" java.runtime.version=1.7.0
          

          这应该可以解决问题。

          【讨论】:

            【解决方案14】:

            您可以像解决许多其他问题一样解决该问题。您需要 Eclipse 和 JDK 是 32 位或两者都是 64 位。操作系统的架构无关紧要,而其他架构保持在同一类型的架构上。

            【讨论】:

              【解决方案15】:

              解决此问题的一种简单方法是将已安装 JDK 的 jre 文件夹复制到 Eclipse 安装文件夹中。确保您从中复制的 JDK 与您的 Eclipse 安装架构相同。

              我必须以这种方式配置我的机器,因为我在我的机器上同时运行 Eclipse 和 Appcelerator Titanium Studio。 Studio 需要 32 位 Java,而 Eclipse 需要 64 位。

              【讨论】:

              • 我很久以前做过同样的事情,但是对于 eclipse-jee-juno-SR1-win32 和 Java6,这一次我无法让它工作。您是否还使用 jre 的绝对路径编辑了 eclipse.ini?
              • 我也有 Eclipse 64 宽 jdk 7 64bit,但钛高我无法加载 jni 共享 dll。
              • 由于 Window 的疯狂自动更新,每当有 JAVA 更新时,它都会阻止我的 Ecipe 启动。上述解决方案是独立工作而不关心自动更新的最简单方法。谢谢!
              【解决方案16】:

              是的,只需确保您的 Eclipse 和 JDK 版本都是 64 位的。只是为了确保一切正确,卸载 JDK 并将其安装在 Program Files 而不是 Program Files (x86) 中。至少这解决了我的问题。

              【讨论】:

                【解决方案17】:

                只需检查 PATH 环境变量。在我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> (左上窗口" “某些 PC 名称”的用户变量)只需检查 PATH 变量。如果它不存在,请使用以下命令创建它 --> C:\Program Files (x86)\Java\jre7\bin

                我在更新 Eclipse 后遇到了同样的问题。我发现该路径要求 64 位版本,但我在 diff 路径中有 32 位。这对我很有帮助。 P.S.:我有一个 64 位操作系统、32 位 JRE 和 32 位 Eclipse。一切正常:)

                【讨论】:

                  【解决方案18】:

                  您应该卸载所有旧的 [JRE][1],然后安装最新的...我遇到了同样的问题,现在我解决了。我已经:

                  最好安装 Jre 6 32 位。真的很管用。

                  【讨论】:

                    【解决方案19】:

                    从站点下载 64 位 JVM 并手动安装并更新系统路径变量。这解决了这个问题。

                    1. 我的系统中安装的默认 JVM 位于“C:\Program Files
                      (x86)\Java\jre7"
                    2. 手动安装的 JVM 安装在 "C:\Program Files\Java\jre7" 并在更新到系统后 它工作的路径变量。

                    【讨论】:

                      【解决方案20】:

                      谢谢misterfrb,我意识到 Eclipse 给出了这个错误,因为我刚刚安装了Oracle 10g Developer suite,它正在寻找C:\DevSuiteHome_1 文件夹中的jvm.dll 文件(我必须选择与开发人员套件一起再次安装 JDK)。

                      在从路径变量中删除 DevSuiteHome 行并添加 64 位 jvm.dll 的更正位置后(不确定这是否必要,没有尝试过),Eclipse 再次工作,开发人员套件仍然如此。

                      【讨论】:

                        【解决方案21】:

                        很简单,我有一个 64 位操作系统,32 位 Eclipse 并安装了 JDK 32 和 64……我刚刚卸载了 64 位 JDK,Eclipse 工作正常……

                        【讨论】:

                          【解决方案22】:

                          从 Java 6 升级到 Java 7 后,我遇到了同样的问题。在我删除 Java 6(64 位)并重新安装 Java 7(64 位)后,Eclipse 工作正常。 :)

                          【讨论】:

                            【解决方案23】:

                            在 eclipse.ini 的开头两行添加 -vm 参数及其值至关重要

                            -vm C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe

                            【讨论】:

                              【解决方案24】:

                              您已在环境变量中更改了正确版本的 JAVA_HOME 和 PATH。

                              【讨论】:

                              • 对我来说效果很好。我已经安装了多个 Java 版本进行测试,并且 Path 和 JAVA_HOME 没有指向同一个安装。我的解决方案:将路径更改为“%JAVA_HOME%\bin”
                              【解决方案25】:

                              我想为这个错误提供另一种解决方案,特别是对于那些想在一个系统中使用 32 位和 64 位 Eclipse 的人。

                              如果存在,Eclipse 将使用jre 子目录中的 JRE/JDK 启动。 (STS 或其他基于 Eclipse 的 IDE 也支持此功能...)

                              解决方案是使用 Windows vista 或更新版本中存在的mklink.exe 命令创建目录连接(junction.exe 为 Windows 2000/XP 提供类似功能)
                              打开命令行窗口并执行以下命令:

                              mklink /j "$ECLIPSE-HOME/jre" "$JDK_or_JRE_home"

                              当然,如果Eclipse是针对64位Windows的,JDK/JRE的架构必须是一样的。

                              假设:

                              • Eclipse for windows x86_64 安装在 d:\devTool\eclipse
                              • JDK for windows x64 安装在 C:\Program Files\Java\jdk1.8.0

                              创建jre 文件夹的命令是:

                              mklink /j "d:\devTool\eclipse\jre" "C:\Program Files\Java\jdk1.8.0"

                              顺便说一句,删除目录连接将删除任何文件。如果您创建了错误的链接,您可以使用文件资源管理器或rmdir 命令将其删除。

                              rmdir "d:\devTool\eclipse\jre"

                              【讨论】:

                                【解决方案26】:

                                确保您以管理员权限启动 Eclipse。

                                【讨论】:

                                  【解决方案27】:

                                  如果您使用整个 64 位三重奏,但它仍然无法工作(我在 Intellij Idea 中启动 Android Monitor 时遇到了这个问题),可能使用了错误的 jvm.dll,这与您的 java 期望相反。只需按照以下步骤操作:

                                  1. 在您的 JRE 目录中找到 jvm.dll: C:\Program Files\Java\jre7\server\bin\jvm.dll

                                  2. 在您的 JDK 目录中找到 jvm.dll: c:\Program Files\Java\jdk1.7.0_xx\jre\bin\server\

                                  3. jvm.dll从JRE目录复制到你的JDK目录并覆盖JDK中的jvm.dll。

                                  别忘了备份,以防万一。无需安装或卸载任何与 Java 相关的东西。

                                  【讨论】:

                                    【解决方案28】:

                                    我也有同样的想法。我有 64 位的 Eclipse,但我的 JDK 是 32 位的。于是我安装了64位的版本,现在可以了。

                                    【讨论】:

                                      【解决方案29】:

                                      我不知道为什么,但是我将 jre 安装到我的 c:\windows 目录中,并将 java.exe 和 javaw.exe 安装在我的 windows\system32 目录中。

                                      显然,即使在将 -vm 标志添加到我的 eclipse.ini 文件之后,这些目录也会获得优先权。

                                      从这里删除它们为我解决了这个问题。

                                      【讨论】:

                                        【解决方案30】:

                                        在Eclipse的下载页面上,应该写成“JRE 32 bits”或者“JRE 64 bits”,而不是“Windows 32 bits”或者“Windows 64 bits”。

                                        如前所述,请务必使用与您的 JDE 兼容的正确版本。

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 2013-11-22
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2013-05-28
                                          • 2014-04-30
                                          • 2014-01-26
                                          相关资源
                                          最近更新 更多