Falha ao carregar a Biblioteca Compartilhada JNI (JDK)

928

Quando tento abrir o Eclipse , uma caixa de diálogo pop-up informa:

Falha ao carregar a biblioteca compartilhada JNI "C: /JDK/bin/client/jvm.dll" `.

Depois disso, a força do Eclipse se fecha.

Aqui estão alguns pontos que gostaria de destacar:

  • Eu verifiquei se havia algo nesse caminho. Existe.
  • Meu Eclipse e Java SE Development Kit são ambos de 64 bits. Eu verifiquei meu sistema, e ele pode lidar com 64 bits.
  • Eu procurei esse problema no Google e no Stack Overflow, e a única resposta que encontrei foi baixar as versões de 32 bits do JDK e Eclipse.

Baixar as versões de 32 bits é algo que só quero fazer como último recurso.
O que seria sugerido para resolver esse problema?

Mxyk
fonte
Qual foi exatamente o problema no seu caso?
S3
4
Para minha surpresa, eu tinha 5 ou mais Java instalados no meu computador. Não só isso, mas aconteceu que eu baixei o Eclipse de 32 bits por acidente. Portanto, desinstalei todos os Java que eu tinha, excluí o Eclipse (o Eclipse não possui uma "desinstalação") e baixei o Eclipse Classic de 64 bits para minha máquina, juntamente com um Java de 64 bits (consulte a resposta do SPP para esse link).
Mxyk
2
Além disso: se alguém tiver problemas para "excluir" o Eclipse (por exemplo, a pasta não desaparecerá, não importa quantas vezes você a remova manualmente ou via prompt de comando), tente excluí-la usando o modo de segurança com o prompt de comando. Não faço ideia por que eu tive que fazer isso, mas isso acabou funcionando.
Mxyk
@ MikeGates Eu também tive esse problema, usei o LockHunter. Obnóxio. Fazer com que esta ferramenta seja executada no Windows é muito trabalhoso.
Jcollum
Eclipse / Java é péssimo quando se trata de 64 bits, é uma desgraça. O melhor conselho que posso dar é manter apenas 32 bits. Economize muito tempo.
Jul13

Respostas:

848

Você precisa de um 64-bittrio:

  • 64-bit OS
  • 64-bit Java
  • 64-bit Eclipse
Peter Rader
fonte
Explicação : Imagine o código nativo (DLL) sendo carregado em um aplicativo. Agora imagine que uma função de 32 bits queira chamar uma de 64 bits, ou similar. O mesmo acontece com o alinhamento e os dados e tudo. Eu acho que eu não tenho que dizer mais nada = P
imacake
@androiddeveloper eu acho que você mistura várias versões java. Tente usar apenas o trio de 64.
Grim
Corretamente! Meu laptop está executando no sistema operacional x64, mas eu instalei o x86 JDK. Acabei de instalar o x64 jdk e o problema desaparece. Obrigado.
Nguyen Minh Binh
Esta resposta não é totalmente exata. Você não precisa executar o JDK de 64 bits e o Eclipse de 64 bits se estiver em um sistema operacional de 64 bits. O SO de 64 bits também pode executar uma combinação de Java de 32 bits + Eclipse de 32 bits. O que deve corresponder é a fragilidade do JRE / JDK e Eclipse.
E-Riz
1
@Tarik sim, é 2015 e infelizmente o Visual Page Editor (VPE) do JBoss Tools ainda aguarda há anos uma atualização de 64 bits. Veja a resposta "Pares de trabalho" abaixo, no segundo par. O JBoss Tools-Plug-in está vinculado à mesma arquitetura que você baixou do Eclipse. Portanto, o Eclipse (com o JBossTools) deve ter 32 bits, o JDK deve ter 32 bits e o sistema operacional pode ter 64 bits. Atualmente, um eclipse de 64 bits não funciona com o JBoss Tools .... Lembro-me de um projeto chamado JBossIDE que funciona usando o Eclipse. Você deve usá-lo em vez de instalar o JBossTools no eclipse. Que vergonha para o JBoss, que vergonha para o mozilla também.
21715 Grim
315

Trabalhando emparelhamentos de SO, JDK e Eclipse:


  • 32-bit OS | 32-bit JDK | 32-bit Eclipse (apenas 32 bits )
  • 64-bit OS | 32-bit JDK | 32-bit Eclipse
  • 64-bit OS | 64-bit JDK| 64bit Eclipse (apenas 64 bits )

Eu tinha vários JDKs e JREs instalados.

Cada um deles tinha sua própria entrada na variável PATH, todos estavam trabalhando mais ou menos.

A julgar pelas variáveis ​​PATH, algumas instalações foram completamente inúteis, pois nunca foram usadas. Obviamente, o Javas "inativo" poderia ser referenciado manualmente a partir do Eclipse, se eu precisasse, mas nunca fiz isso, então realmente não precisava deles. (Pelo menos eu pensava naquele momento ...)

Limpei a bagunça, desinstalei todos os Java atuais, instalei apenas o JDK + JRE 1.7 de 64 bits.

Uma das 'instalações' do Eclipse falhou posteriormente com o Failed to Load the JNI shared Librarye um determinado caminho em relação ao JDK instalado fresco onde ele pensava jvm.dllestar.

O Eclipse com falha foi o único de todos os meus IDEs que ainda era uma versão de 32 bits na minha configuração de 64 bits.

A adição de argumentos de VM, como tantas vezes mencionado, eclipse.ininão foi útil no meu caso (porque eu tinha apenas o JDK / JRE errado para me relacionar.)

Também não consegui descobrir como verificar se esse Eclipse era uma versão de 32 ou 64 bits (não consegui procurá-lo no Gerenciador de Tarefas , pois essa 'instalação' do Eclipse não seria inicializada. faz um tempo desde que eu o configurei, também não conseguia me lembrar de sua versão.)

Caso você use um JDK mais novo e um JRE mais antigo, você também pode estar com problemas, mas é mais provável que java.lang.UnsupportedClassVersionErrorapareça, IIRC .

sjas
fonte
3
Ele deve usar apenas o primeiro \ bin a que se refere a variável Path
eearperto de
Mmmm, essa é sempre a questão ... Os documentos do Oracle dizem que ele usa apenas o primeiro, mas talvez algo mais estivesse sendo alterado / já estivesse no local e funcionando. Parece que é sempre algo estranho assim.
Ekinperto de 23/07/12
8
para verificar qual versão de 32 ou 64 bits, abra o eclipse.ini e procure o iniciador do equinócio usado (por exemplo, org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502)
Steve Oh
Eu tive essa combinação com o erro. SO de 64 bits - JDK de 32 bits - Eclipse de 32 bits e não funciona. Eu o resolvi com este combo: SO de 64 bits - JDK de 64 bits - Eclipse de 64 bits (apenas 64 bits). A variável% PATH% foi atualizada para apontar para a versão java de 64 bits. Na verdade, o% JAVA_HOME% foi atualizado, pois essa variável é usada nos valores da variável% PATH%.
thanos.a
1
Foi o comentário de @ekinnear que resolveu meu problema. Não sei por que ele estava procurando o JVM.dll na minha pasta windows / bin, mas colocar o caminho correto no lugar parece ter resolvido.
James
267

Verifique se o seu eclipse.iniarquivo inclui as seguintes linhas.

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

Meu eclipse.inipor exemplo:

-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

Use o SO e o Eclipse, ambos de 64 bits ou ambos de 32 bits, mantendo a mesma configuração eclipse.ini.

Seu eclipse.iniarquivo pode ser encontrado na sua pasta eclipse .

jayesh kavathiya
fonte
9
Isso resolve o problema. Eu adicionei a -vm C:\Program Files\Java\jdk1.6.0_32\bin\javaw.exelinha ao meu arquivo eclipse.ini e ele começou muito bem. Obrigado pela ajuda +1.
prolink007
1
este belo trabalho por favor, verifique a sua versão do Java, execute java -version em um console e verifique se esta é a versão que está sendo usado pelo Eclipse ou não
jayesh kavathiya
2
Fiz isso com meu Java 6 SDK e não funcionou. Eu tentei novamente, apontando para o meu Java 7 SDK, e funcionou. Estou no Windows 8 de 64 bits, Java 6 e 7 (ambos de 64 bits) e Eclipse Helios (32 bits). Eu estava pronto para desinstalar e reinstalar o Eclipse de 64 bits, mas parece que o SDK do java 7 inclui alguma nova inteligência para executar aplicativos de 32 bits melhor.
Ryan Shillington
9
isso funciona. mas precisa colocar -vm na parte superior do arquivo ini; pelo menos antes -vmargs ou --launcher.xxx
pinkdawn
2
Muito, muito importante ponto que eu perdi. Se você usar como: "-vm C: \ Arquivos de programas \ Java \ jdk1.6.0_32 \ bin \ javaw.exe", nunca funcionará corretamente "-vm C: \ Arquivos de programas \ Java \ jdk1.6.0_32 \ bin \ javaw.exe "A nova linha após a -vm é muito importante.
School Boy
42

Esse erro significa que a arquitetura do Eclipse não corresponde à arquitetura do tempo de execução Java, ou seja, se um é de 32 bits, o outro deve ser o mesmo, e não de 64 bits.

A correção mais confiável é especificar o local da JVM no eclipse.ini:

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

Importante: Essas duas linhas devem vir antes de -vmargs. Não use aspas; espaços são permitidos.

Peter Tseng
fonte
Oi, estou trabalhando há algum tempo com esta configuração .ini, devo atualizar a arquitetura para 64 bits ou posso ignorar o fato de ter arquiteturas diferentes? Thx
Billyjoker
32

Outra opção é:

Crie um atalho para o Eclipse.exe. Abra o atalho e altere o destino para:

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

Para sua instalação, verifique se os locais apontam para o diretório de instalação correto do Eclipse e javaw.exe diretório de instalação .

(As versões de 64/32 bits do Eclipse e Java precisam ser as mesmas, é claro.)

Spannow
fonte
Boas opções, mas adicioná-lo ao arquivo ini como acima deve funcionar
mr.user1065741
2
Não há necessidade de alterar o arquivo .ini. Basta usar o combo de 64 bits para java e eclipse
thanos.a
29

Eu tenho várias versões do Java instaladas, o Sun JDK e o JRockit, de 32 e 64 bits, etc., e deparei-me com esse problema com uma nova instalação do Eclipse para Java EE (JUNO) de 64 bits.

O que NÃO funcionou:

Trio de 64 bits, conforme sugerido por Peter Rader:

Estou usando o Eclipse de 64 bits no sistema operacional de 64 bits (Windows 7).

Assegurei que o Sun JDK 7 de 64 bits fosse a versão java padrão. Quando digitei "java -version" na linha de comando (cmd.exe), o Sun JDK 7 de 64 bits foi retornado ...

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)

Isso não resolveu o problema para mim.

Que DID funcionou:

Adicionando a opção -vm ao eclipse.ini, conforme sugerido por Jayesh Kavathiya:

Adicionei o seguinte ao eclipse.ini:

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

Nota:

Não precisei desinstalar nenhuma das várias versões do JDK ou JRE que tenho na minha máquina.

Sunny Sarkar
fonte
Também não precisei desinstalar o JDK, mas optei por limpar meu sistema para eliminar futuras causas de erro. Eu também mencionei os argumentos da VM e expliquei por que eles obviamente não podiam funcionar para mim. É sua escolha como você deseja configurar seu sistema, dependendo do que você realmente precisa.
S12 /
Eu tive que fazer as duas coisas, mas adicionar a linha javaw.exe me levou a instalar tudo em 64 bits, de qualquer maneira. Depende de quanto punição de karma você deve pagar ao android.
21413 Josh
Estou desenvolvendo há anos e, sem nenhuma alteração no meu sistema (que eu saiba), o Eclipse lança esse erro. A adição da opção -vm resolveu para mim, sem a necessidade de alterar outras configurações ou desinstalar / reinstalar qualquer coisa.
Knossos
18

Para um jvm.dllarquivo ausente , podemos fornecer o caminho do arquivo DLL no eclipse.iniarquivo como

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

Aqui é importante remover qualquer espaço no caminho e as aspas duplas. Funcionou para mim quando removi as aspas e o espaço.

Eu espero que isso ajude alguém.

Stalin Gino
fonte
1
Isso me ajudou em vez de -vm javaw.exe
amj
11

Eu tive um problema parecido. Foi resolvido fazendo o seguinte.

  • Mova o Eclipse para Arquivos de Programa (não para Arquivos de Programa (x86) ).
  • Remova o caminho para a versão de 32 bits do Java da variável de ambiente 'path'.

Eu tenho as duas versões do Java instaladas, mas o Eclipse continuou tentando usar a versão de 32 bits.

misterfrb
fonte
10

Claro, você precisa ter uma versão compatível do JDK e Eclipse, mas também precisa adicionar no eclipse.iniarquivo as linhas abaixo:

-vm
yourdrive\java\bin

Faça delas as duas primeiras linhas do seu eclipse.iniarquivo.

Deepak Tyagi
fonte
7

Como muitas pessoas já mencionaram, esse é um problema de 32 x 64 bits para Eclipse e Java . Você não pode misturar 32 e 64 bits. Como o Eclipse não usaJAVA_HOME , você provavelmente precisará alterar seu PATH antes de iniciar o Eclipse para garantir que esteja usando não apenas a versão apropriada do Java, mas também 32 ou 64 bits (ou modifique o arquivo INI como Jayath observou) .

Se você estiver instalando o Eclipse a partir de um compartilhamento da empresa, verifique se você está descompactando qual versão do Eclipse está descompactada e descompacte no diretório apropriado dos Arquivos de Programas para ajudar a controlar qual é qual e, em seguida, altere o PATH (permanentemente via ( Windows) Painel de controle -> Sistema ou conjunto PATH=/path/to/32 or 64bit/java/bin;%PATH%(talvez crie um arquivo em lotes, se você não quiser defini-lo em seu sistema e / ou variáveis ​​de ambiente do usuário) Lembre-se de 32 bits nos arquivos de programas (x86) .

Se não tiver certeza, basta iniciar o Eclipse, se você receber o erro, altere seu PATH para a outra versão 'bit' de Java e tente novamente. Em seguida, mova o diretório Eclipse para o diretório apropriado Arquivos de Programas .

Marc Towersap
fonte
É claramente um problema, pois esta página tem 700k visualizações atualmente ... e um ano depois, aparentemente não há uma correção para isso que não envolva mexer nas variáveis ​​de ambiente apenas para que o IDE seja executado!
Ciaran Gallagher
6

Como alternativa, obtenha a mesma versão "bit" do JRE e Eclipse e crie um novo atalho com o destino abaixo (substitua o local / caminho JRE e Eclipse instalado):

"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

Isso deve fazer o truque.

Kevin Yap
fonte
6

Você pode resolver esse problema como muitos outros replicados. Você precisa que o Eclipse e o JDK tenham 32 bits ou ambos em 64 bits . A arquitetura do sistema operacional não importa, enquanto os outros permanecem no mesmo tipo de arquitetura.

Ignacio
fonte
6

As respostas acima de mim me deixaram tão tentada que decidi executar todas as combinações possíveis com o trio OS, Eclipse e JVM . De qualquer forma, quem estiver pesquisando e lendo minha postagem, verifique o seguinte como um hot spot (eu sou usuário do Windows 7).

  1. Você entende que Arquivos de programas e Arquivos de programas (x86) são duas pastas diferentes ... x86 significa a versão de 32 bits dos programas e a primeira é a versão de 64 bits.

  2. Se você tiver várias versões do Java instaladas com diferentes versões de testemunha e versão, o que acontecerá com tantos IDEs de código aberto , gerenciadores, consoles administrativos, a melhor opção é definir o argumento da VM diretamente no eclipse.iniarquivo. Caso contrário, o Eclipse ficará louco e tentará pesquisar por si mesmo, o que não é bom.

dizem
fonte
5

Uma das maneiras fáceis de resolver isso é copiar a jrepasta do JDK instalado na pasta de instalação do Eclipse. Verifique se o JDK do qual você copia é da mesma arquitetura que sua instalação do Eclipse.

Eu tive que configurar minha máquina dessa maneira, porque eu executo o Eclipse e o Appcelerator Titanium Studio na minha máquina. O Studio precisa de Java de 32 bits, enquanto o Eclipse precisa de 64 bits.

Mike Starov
fonte
Fiz a mesma coisa há muito tempo, mas para eclipse-jee-juno-SR1-win32 e Java6, não consegui fazê-lo funcionar desta vez. Você também editou o eclipse.ini com um caminho absoluto para o jre?
user77115
Eu também tenho Eclipse 64 largura jdk 7 64bit, mas titânio alto me é incapaz de carregar a DLL compartilhada jni.
Realtebo 19/04
Por causa das loucas atualizações automáticas do Window, sempre que há uma atualização para JAVA, ele bloqueia o lançamento do meu Eclipe. A solução acima é a maneira mais fácil de trabalhar independentemente, sem se importar com as atualizações automáticas. Obrigado!
Jyo the Whiff
4

Sim, verifique se as versões do Eclipse e JDK são de 64 bits. Apenas para garantir que tudo esteja correto, desinstale o JDK e instale-o em Arquivos de Programas e não em Arquivos de Programas (x86) . Pelo menos isso resolveu meu problema.

Jeena
fonte
4

Basta verificar a variável de ambiente PATH. Em Meu computador -> Propriedades -> Configurações avançadas do sistema -> Variáveis ​​de ambiente -> (janela superior esquerda "Variáveis ​​de usuário para" algum nome do PC ""), basta verificar a variável PATH. Se não existir, crie-o com o seguinte -> C: \ Arquivos de Programas (x86) \ Java \ jre7 \ bin <-

Fui confrontado com o mesmo problema depois de atualizar meu Eclipse. Eu descobri que o caminho pedia a versão de 64 bits, mas eu tinha o caminho de 32 bits em dif. Foi útil para mim. PS: Eu tenho um SO de 64 bits, JRE de 32 bits e Eclipse de 32 bits. Tudo funciona bem :)

user1600401
fonte
4

Você deve desinstalar todos os [JREs] antigos [1] e instalar o mais novo ... Eu tive o mesmo problema e agora o resolvo. Eu tenho:

Melhor instalar o Jre 6 de 32 bits. Realmente funciona.

Marcin Erbel
fonte
3

Baixou a JVM de 64 bits do site, instalou-a manualmente e atualizou a variável de caminho do sistema. Isso resolveu o problema.

  1. A JVM padrão está instalada no meu sistema estava em "C: \ Arquivos de Programas
    (x86) \ Java \ jre7"
  2. A JVM instalada manualmente foi instalada em "C: \ Arquivos de Programas \ Java \ jre7" e, após atualizar esse patê para a variável de caminho do sistema, ela funcionou.
Satya
fonte
3

Obrigado misterfrb , percebi que o Eclipse estava dando esse erro, porque havia acabado de instalar o Oracle 10g Developer Suite e ele estava procurando o jvm.dllarquivo na C:\DevSuiteHome_1pasta (devo ter optado por instalar o JDK novamente junto com o Developer Suite).

Depois de remover as linhas DevSuiteHome da variável caminhos e adicionar o local de correção para 64 bits jvm.dll(não tendo certeza se isso era necessário, não foi possível), o Eclipse funcionou novamente e o pacote Developer ainda o faz.

Unegma
fonte
3

Simples, tenho um SO de 64 bits, Eclipse de 32 bits e o JDK 32 e 64 instalado ... Acabei de desinstalar o JDK de 64 bits e o Eclipse está funcionando bem.

PushkarHJoshi
fonte
3

Eu tive o mesmo problema após atualizar do Java 6 para o Java 7. Depois de remover o Java 6 (64 bits) e reinstalar o Java 7 (64 bits), o Eclipse funcionou. :)

Supun Sameera
fonte
3

É crucial adicionar o parâmetro -vm e seu valor em 2 linhas NO INÍCIO do eclipse.ini

-vm C: \ Arquivos de programas \ Java \ jdk1.7.0_45 \ bin \ javaw.exe

Rolf
fonte
3

Desejo prever outra solução para esse erro, especialmente para quem deseja usar o Eclipse de 32 e 64 bits em um sistema.

O Eclipse inicializará usando o JRE / JDK no jresubdiretório, se existir. (STS ou outro IDE baseado em eclipse também suporta esse recurso ...)

A solução é criar junção de diretório usando o mklink.execomando existente no Windows Vista ou versão mais recente ( junction.exe oferece função semelhante para o Windows 2000 / XP)
Abra as janelas da linha de comando e execute o seguinte comando:

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

Obviamente, se o Eclipse for para Windows de 64 bits, a arquitetura do JDK/JRE deve ser a mesma.

Presumir:

  • Eclipse for windows x86_64está instalado em d: \ devTool \ eclipse
  • JDK for windows x64está instalado em C: \ Arquivos de Programas \ Java \ jdk1.8.0

O comando para criar a jrepasta será:

mklink / j "d: \ devTool \ eclipse \ jre" "C: \ Arquivos de programas \ Java \ jdk1.8.0"

BTW, excluir junção de diretório NÃO excluirá nenhum arquivo. Se você criar um link errado, poderá excluí-lo usando o gerenciador de arquivos ou o rmdircomando.

rmdir "d: \ devTool \ eclipse \ jre"

Beck Yang
fonte
2

Certifique-se de iniciar o Eclipse com direitos de administrador.

Aqui para ajudar
fonte
2

Se você usar um trio completo de 64 bits e ele ainda não funcionar (eu vim para esse problema ao iniciar o Android Monitor no Intellij Idea), provavelmente o jvm.dll provavelmente está sendo usado em oposição ao que seu java espera. Basta seguir estes passos:

  1. Encontre o jvm.dll no diretório JRE: C:\Program Files\Java\jre7\server\bin\jvm.dll

  2. Encontre o jvm.dll no diretório JDK: c:\Program Files\Java\jdk1.7.0_xx\jre\bin\server\

  3. Copie o jvm.dlldiretório do JRE para o diretório JDK e substitua o jvm.dll no JDK.

Não se esqueça de fazer um backup, apenas por precaução. Não há necessidade de instalar ou desinstalar nada relacionado ao Java.

rootpd
fonte
2

O mesmo me ocorreu. Eu tinha o Eclipse de 64 bits, mas meu JDK era de 32 bits. Então, instalei a versão de 64 bits e agora está tudo bem.

felipe.zkn
fonte
2

Não sei por que, mas eu tinha o jre instalado no meu diretório c: \ windows e java.exe e javaw.exe dentro do meu diretório windows \ system32.

Obviamente, esses diretórios estavam obtendo prioridade mesmo após a adição do sinalizador -vm ao meu arquivo eclipse.ini.

Excluí-los daqui corrigiu o problema para mim.

Guy Lowe
fonte
2

Você alterou a versão adequada do JAVA_HOME e PATH nas variáveis ​​ambientais.

Sreedhar GS
fonte
1

Na página de download do Eclipse, ele deve estar escrito "JRE 32 bits" ou "JRE 64 bits" e não "Windows 32 bits" ou "Windows 64 bits".

Certifique-se de usar a versão correta compatível com o seu JDE, conforme respondido anteriormente.

A_rnO
fonte