无法加载JNI共享库(JDK)


928

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

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

此后,Eclipse强制关闭。

我想提出以下几点:

  • 我检查了该路径是否存在任何东西。它确实存在。
  • 我的Eclipse和Java SE开发套件都是64位的。我检查了系统,它可以处理64位。
  • 我已经在Google和Stack Overflow上搜索了此问题,发现的唯一答案是下载32位版本的JDK和Eclipse。

作为最后的选择,我只想下载32位版本。
有什么建议可以解决这个问题?


您所遇到的问题到底是什么?
sjas 2012年

4
令我惊讶的是,我的计算机上安装了大约5个Java。不仅如此,事实证明我是偶然下载了32位Eclipse。因此,我卸载了所有拥有的Java,删除了Eclipse(Eclipse没有“卸载”),并为我的机器下载了64位的Eclipse Classic,以及64位的Java(有关链接,请参阅SPP的答案)。
Mxyk

2
另外:如果有人在“删除” Eclipse时遇到麻烦(例如,无论您手动或通过命令提示符将其删除多少次,该文件夹都不会消失),请尝试使用带有命令提示符的安全模式将其删除。为什么我必须这样做,但这最终奏效了。
Mxyk

@MikeGates我也有这个问题,使用了LockHunter。令人讨厌 要使该工具在Windows上运行是太多的工作。
jcollum 2013年

当涉及到64位时,Eclipse / Java很烂,这是一个耻辱。我能给出的最佳建议是仅坚持32位。节省大量时间。
onknows 2013年

Answers:


848

您需要64-bit三个:

  • 64-bit 操作系统
  • 64-bit 爪哇
  • 64-bit 日食

说明:想象将本机代码(DLL)加载到应用程序中。现在想象一下32位函数想要调用64位函数,等等。与对齐和数据大小以及所有内容相同。我想我不必说更多= P
imacake 2012年

@androiddeveloper我猜你混合了多个Java版本。尝试仅使用64个三重奏。
格林(Grim)

正确!我的笔记本电脑在x64 OS上运行,但是我安装了x86 JDK。刚安装了x64 jdk,问题就消失了。谢谢。
Nguyen Minh Binh

这个答案实际上并不完全准确。你不会需要运行64位的JDK和64位的Eclipse,如果您使用的是64位操作系统。64位操作系统同样可以运行32位Java + 32位Eclipse的组合。什么必须匹配是JRE / JDK和Eclipse的bittedness。
E-Riz 2014年

1
@Tarik是的,JBoss Tools的2015年和不幸的是Visual Page Editor(VPE)仍在等待多年,以进行64位升级。请看第二对下面的“ Working-Pairs”答案。JBoss Tools-Plug-in绑定到您下载Eclipse的相同体系结构。因此,Eclipse(使用JBossTools)必须为32位,JDK必须为32位,操作系统可以为64位。目前,64位eclipse不能与JBoss Tools一起使用...。我记得一个名为JBossIDE的项目可以使用Eclipse进行工作,您应该使用它而不是将JBossTools安装到eclipse中。对您JBoss感到羞耻,对mozilla也感到羞耻。
严峻2015年

315

OS,JDK和Eclipse的有效配对:


  • 32-bit 操作系统 | 32-bit JDK | 32-bit Eclipse仅32位
  • 64-bit 操作系统 | 32-bit JDK | 32-bit 日食
  • 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位版本。

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

我也无法找出如何检查此Eclipse是32位还是64位版本(我无法在任务管理器中查找它,因为此Eclipse“安装”将无法启动。自从我进行设置已经有一段时间了,我也不记得它的版本。)

如果您使用较新的JDK和较旧的JRE,也可能会遇到麻烦,但是很可能会java.lang.UnsupportedClassVersionError出现一个IIRC


3
它仅应使用Path变量中的第一个\ bin
ekinnear 2012年

嗯,这一直是个问题……Oracle文档说它只使用第一个,但是也许其他事情正在更改/已经就位并可以使用。似乎总是这样的奇怪。
ekinnear'7

8
要检查哪个版本的32位或64位版本,请打开eclipse.ini,并查找所使用的春分启动器(例如org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502)
Steve Oh

我有这个组合错误。64位操作系统-32位JDK-32位Eclipse,它不起作用。我使用以下组合解决了这个问题:64位OS-64位JDK-64位Eclipse(仅64位)。%PATH%变量已更新为指向64位Java版本。实际上,已将%JAVA_HOME%更新,因为此变量已用于%PATH%变量值。
thanos.a 2014年

1
@ekinnear的评论解决了我的问题。我不确定为什么要在我的windows / bin文件夹中寻找JVM.dll,但是放置正确的路径似乎已经解决了。
詹姆斯

267

确保您的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文件夹中找到


9
这样就解决了问题。我将该-vm C:\Program Files\Java\jdk1.6.0_32\bin\javaw.exe行添加到了eclipse.ini文件中,它开始正常。感谢您的帮助+1。
prolink007,2012年

1
这项工作正常,请检查您的Java版本,在控制台中运行java -version并检查是否为Eclipse使用的版本
jayesh kavathiya 2012年

2
我使用Java 6 SDK进行了此操作,但此操作无效。我再次尝试它,指向我的Java 7 SDK,它成功了。我使用的是Windows 8 64位,Java 6和7(均为64位)和Eclipse Helios(32位)。我已经准备好卸载并重新安装Eclipse 64位,但是Java 7 SDK似乎包含了一些新的知识,可以更好地运行32位应用程序。
Ryan Shillington

9
这可行。但需要将-vm放在ini文件的顶部;至少在-vmargs或--launcher.xxx之前
pinkdawn

2
我错过的非常非常重要的一点。如果使用类似“ -vm C:\ ProgramFiles \ Java \ jdk1.6.0_32 \ bin \ javaw.exe”的文件,则它将永远无法正常工作。 javaw.exe” -vm之后的换行非常重要。
男生


42

此错误意味着Eclipse的体系结构与Java运行时的体系结构不匹配,即,如果一个是32位,则另一个必须相同,而不是64位。

最可靠的修复是在eclipse.ini中指定JVM位置:

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

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


嗨,我从一段时间前开始就使用此.ini设置进行工作,我应该将体系结构更新为64位,还是可以忽略具有不同体系结构的事实?Thx
Billyjoker

32

另一个选择是:

创建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文件中应该可以工作
mr.user1065741 2013年

2
无需更改.ini文件。只需将64位组合用于Java和Eclipse
thanos.a,2014年

29

我安装了多个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位...

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参数,并解释了为什么它们显然对我不起作用。您可以根据自己的实际需要选择设置系统的方式。
sjas 2012年

我必须做这两件事,但是无论如何,添加javaw.exe行导致我将所有内容安装在64位上。这取决于您要向android支付多少业障惩罚。
2014年

我已经开发了多年,并且对我的系统没有任何更改(据我所知),Eclipse抛出了该错误。添加-vm选项可以解决我的问题,而无需更改任何其他设置或取消/重新/安装任何内容。
Knossos 2015年

18

对于丢失的jvm.dll文件,我们可以将dll文件的路径提供eclipse.ini

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

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

希望对您有所帮助。


1
这对我有帮助,而不是-vm javaw.exe
amj

11

我有一个类似的问题。解决了以下问题。

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

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


10

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

-vm
yourdrive\java\bin

使它们成为eclipse.ini文件的前两行。


7

正如许多人已经提到的那样,对于EclipseJava来说,这是32位对64位的问题。您不能混合使用32位和64位。由于Eclipse不使用JAVA_HOME,您可能必须在启动Eclipse之前先更改PATH,以确保不仅使用适当版本的Java,而且使用32或64位版本(或按照Jayath所述修改INI文件) 。

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

如果不确定,请启动Eclipse,如果出现错误,请将PATH更改为Java的另一个“位”版本,然后重试。然后将Eclipse目录移动到适当的Program Files目录。


显然,这是一个问题,因为此页面目前有700k的浏览量……一年后,显然还没有针对该问题的解决方案,该解决方案不涉及为了使IDE运行而在环境变量中四处乱动!
Ciaran Gallagher 2014年

6

或者,获取相同的“位”版本的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

这应该够了吧。


6

您可以解决许多其他复制的问题。您需要Eclipse和JDK为32位,或者都为64位。操作系统的体系结构无关紧要,而其他操作系统则保持相同的类型。


6

我上面的答案让我很受诱惑,于是我决定试运行所有可能的OS,EclipseJVM trio组合。无论如何,无论是谁在挖掘并阅读我的文章,都应将以下内容作为热点(我是Windows 7用户)。

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

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


5

解决该问题的简便方法之一是将jre文件夹从已安装的JDK 复制到Eclipse安装文件夹中。确保从中复制的JDK与Eclipse安装具有相同的体系结构。

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


我很久以前做了同样的事情,但是对于eclipse-jee-juno-SR1-win32和Java6,这次我无法使它正常工作。您是否还使用指向jre的绝对路径来编辑eclipse.ini?
user77115 '10 -10-10

我也有Eclipse 64宽度的jdk 7 64bit,但是钛高我无法加载jni共享的dll。
realtebo

由于Window疯狂的自动更新,只要有JAVA的更新,它就会阻止我的Eclipe启动。上述解决方案是独立工作而不关心自动更新的最简单方法。谢谢!
乔伊

4

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


4

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

更新了Eclipse之后,我也面临着同样的问题。我发现该路径要求使用64位版本,但我在dif路径中使用了32位。对我有帮助。PS:我有一个64位操作系统,32位JRE和32位Eclipse。一切正常:)


4

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

最好安装Jre 6 32位。真的行。


3

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

  1. 我的系统中安装的默认JVM位于“ C:\ Program Files
    (x86)\ Java \ jre7”中
  2. 手动安装的JVM已安装在“ C:\ Program Files \ Java \ jre7”中,并将此页面更新为系统路径变量后,它可以工作。

3

谢谢misterfrb,我意识到Eclipse正在给出此错误,因为我刚刚安装了Oracle 10g Developer Suite,并且它正在寻找jvm.dll文件C:\DevSuiteHome_1夹中的文件(我必须选择与Developer Suite一起重新安装JDK)。

从paths变量中删除了DevSuiteHome行,并为64位添加了更正位置之后jvm.dll(不确定是否有必要,请尝试一下),Eclipse再次工作了,并且Developer Suite仍然这样做。


3

很简单,我有一个64位操作系统,一个32位Eclipse并同时安装了JDK 32和64 ...我刚刚卸载了64位JDK,Eclipse运行正常。


3

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


3

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

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


3

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

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

解决方案是使用mklink.exe存在于Windows Vista或更高版本中的命令创建目录连接(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”



2

如果您使用整个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 drectory 复制到您的JDK目录,并覆盖JDK中的jvm.dll。

为了以防万一,请不要忘记进行备份。无需安装或卸载与Java相关的任何内容。


2

我也一样。我有64位Eclipse,但我的JDK是32位。所以我安装了64位版本,现在可以了。


2

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

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

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



1

在Eclipse的下载页面上,应将其写为“ JRE 32位”或“ JRE 64位”,而不是“ Windows 32位”或“ Windows 64位”。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.