Не удалось загрузить общую библиотеку JNI (JDK)

928

Когда я пытаюсь открыть Eclipse , всплывающее диалоговое окно гласит:

Не удалось загрузить общую библиотеку JNI "C: /JDK/bin/client/jvm.dll" `.

После этого сила затмения закрывается.

Вот несколько замечаний, которые я хотел бы сделать:

  • Я проверил, существует ли что-нибудь на этом пути. Это существует.
  • Мой Eclipse и Java SE Development Kit оба являются 64-битными. Я проверил свою систему, и она может обрабатывать 64-разрядные.
  • Я искал эту проблему в Google и в Stack Overflow, и единственный ответ, который я нашел, был загрузить 32-битные версии JDK и Eclipse.

Загрузка 32-битных версий - это то, что я хочу сделать только в крайнем случае.
Что будет предложено для решения этой проблемы?

Mxyk
источник
Что именно было проблемой в вашем случае?
Sjas
4
К моему удивлению, на моем компьютере было установлено около 5 Java. Мало того, но оказалось, что я скачал 32-битный Eclipse случайно. Итак, я удалил все имеющиеся у меня Java, удалил Eclipse (у Eclipse нет «удаления») и скачал Eclipse Classic 64-bit для моей машины вместе с 64-bit Java (см. Ответ SPP для этой ссылки).
Mxyk
2
Кроме того: если у кого-то возникнут проблемы с «удалением» своего Eclipse (например, папка не исчезнет, ​​независимо от того, сколько раз вы удаляете ее вручную или через командную строку), попробуйте удалить ее в безопасном режиме с командной строкой. Понятия не имею почему я должен был это сделать, но в итоге это сработало.
Mxyk
@MikeGates У меня тоже была такая проблема, я использовал LockHunter. Неприятный. Запустить этот инструмент на Windows - слишком много работы.
Jcollum
Затмение / Java отстой, когда дело доходит до 64 бит, это позор. Лучший совет, который я могу дать, это придерживаться только 32-битной версии. Экономьте кучу времени.
onknows

Ответы:

849

Вам нужно 64-bitтрио:

  • 64-bit Операционные системы
  • 64-bit Ява
  • 64-bit Затмение
Peter Rader
источник
Объяснение : Представьте, что в приложение загружается собственный код (DLL). Теперь представьте, что 32-битная функция хочет вызвать 64-битную или похожую. То же самое с выравниванием и размерами данных и всем. Я думаю, мне не нужно больше ничего рассказывать = P
imacake
@androiddeveloper Я думаю, вы смешиваете несколько версий Java. Попробуйте использовать только 64 трио.
Мрачное
Правильно! Мой ноутбук работает на x64 OS, но я установил x86 JDK. Только что установил x64 jdk и проблема ушла. Спасибо.
Нгуен Минь Бинь
Этот ответ на самом деле не совсем точен. Вам не нужно запускать 64-битный JDK и 64-битный Eclipse, если вы работаете в 64-битной ОС. 64-битная ОС также может запускать комбинацию 32-битной Java + 32-битной Eclipse. Что должно совпадать, так это горечь JRE / JDK и Eclipse.
E-Riz
1
@Tarik да, это 2015 год, и, к сожалению, Visual Page Editor (VPE) JBoss Tools все еще долгие годы ждет 64-битного обновления. Посмотрите ответ "Рабочие пары" ниже, на вторую пару. Подключаемый модуль JBoss Tools привязан к той же архитектуре, что и Eclipse. Таким образом, Eclipse (с JBossTools) должен быть 32-разрядным, JDK должен быть 32-разрядным, а ОС - 64-разрядной. 64-битное затмение в настоящее время не работает с JBoss Tools .... Я помню проект под названием JBossIDE, который работает с Eclipse, вы должны использовать его вместо установки JBossTools в eclipse. Позор тебе, JBoss, позор и Мозилле.
Мрачный
315

Рабочие пары ОС, JDK и Eclipse:


  • 32-bit ОС | 32-bit JDK | 32-bit Затмение (только 32-битное )
  • 64-bit ОС | 32-bit JDK | 32-bit Затмение
  • 64-bit ОС | 64-bit JDK| 64bit Затмение (только 64-битное )

У меня было установлено несколько JDK и JRE.

У каждого из них была своя запись в переменной PATH, все работало более или менее.

Судя по переменным PATH, некоторые установки были совершенно бесполезны, так как они никогда не использовались. Конечно, на «неактивные» Javas можно было ссылаться вручную из Eclipse, если бы я нуждался, но я этого никогда не делал, поэтому они мне действительно не нужны. (По крайней мере, я так думал в то время ...)

Я убрал беспорядок, удалил все текущие Java, установил только JDK + JRE 1.7 64-bit.

Одна из «установок» Eclipse впоследствии потерпела неудачу с указанным Failed to Load the JNI shared Libraryи заданным путем относительно свежего установленного JDK, где, как он думал, и jvm.dllнаходится.

Отказавший Eclipse был единственным из всех моих IDE, который все еще был 32-битной версией в моих остальных полностью 64-битных настройках.

Добавление аргументов VM, как это часто упоминалось, в eclipse.iniмоем случае было бесполезно (потому что у меня был только неправильный JDK / JRE, чтобы иметь отношение к нему).

Я также не смог выяснить, как проверить, была ли эта Eclipse 32-битной или 64-битной версией (я не смог найти ее в диспетчере задач , так как эта «установка» Eclipse не запустилась. я давно не мог вспомнить его версию.)

Если вы используете более новую версию JDK и более раннюю версию JRE , возможно, у вас тоже возникнут проблемы, но тогда, скорее всего, java.lang.UnsupportedClassVersionErrorпоявится IIRC .

sjas
источник
3
Он должен использовать только первый \ bin в переменной Path
ekinnear
Мммм, это всегда вопрос ... Документы Oracle говорят, что он использует только первый, но, возможно, что-то еще было изменено / уже было на месте и работает. Кажется, это всегда что-то странное, как это.
ekinnear
8
чтобы проверить, какая версия 32-разрядная или 64-разрядная, откройте eclipse.ini и найдите используемый модуль запуска равноденствия (например, 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%.
thanos.a
1
Именно комментарий @ekinnear решил мою проблему. Я не уверен, почему он искал JVM.dll в моей папке windows / bin, но установка правильного пути, кажется, разрешила его.
Джеймс
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

Используйте ОС и Eclipse, как 64-битные, так и 32-битные, сохраняйте одинаковые настройки и конфигурации eclipse.ini.

Ваш eclipse.iniфайл может быть найден в вашей папке Eclipse .

джайеш каватия
источник
9
Это решает проблему. Я добавил -vm C:\Program Files\Java\jdk1.6.0_32\bin\javaw.exeстроку в мой файл eclipse.ini, и он запустился очень хорошо. Спасибо за помощь +1.
prolink007
1
это нормально работает, пожалуйста, проверьте вашу версию Java, запустите java -version в консоли и убедитесь, что эта версия используется Eclipse или нет
jayesh kavathiya
2
Я сделал это с моим Java 6 SDK, и это не сработало. Я попробовал это снова, указывая на мой Java 7 SDK, и это сработало. Я на Windows 8 64-разрядных, Java 6 и 7 (оба 64-разрядных) и Eclipse Helios (32-разрядных). Я был готов удалить и переустановить Eclipse 64-bit, но, похоже, java 7 SDK включает в себя некоторые новые интеллектуальные возможности для улучшения работы 32-битных приложений.
Райан Шиллингтон
9
это работает. но нужно поместить -vm в начало файла ini; по крайней мере, до -vmargs или --launcher.xxx
pinkdawn
2
Очень Очень Важный момент, который я пропустил. Если вы используете как: "-vm C: \ ProgramFiles \ Java \ jdk1.6.0_32 \ bin \ javaw.exe", это никогда не будет работать правильно "-vm C: \ Program Files \ Java \ jdk1.6.0_32 \ bin \ javaw.exe "Новая строка после -vm очень важна.
Школьник
42

Эта ошибка означает, что архитектура Eclipse не соответствует архитектуре среды выполнения Java, то есть, если один 32-разрядный, другой должен быть таким же, а не 64-разрядным.

Наиболее надежное решение - указать расположение JVM в eclipse.ini:

-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каталог установки.

(Конечно, 64-32-битные версии Eclipse и Java должны быть одинаковыми.)

spannow
источник
Хорошие варианты, но добавление его в INI-файл, как указано выше, должно работать
mr.user1065741
2
Не нужно менять файл .ini. Просто используйте 64-битную комбинацию для Java и Eclipse
thanos.a
29

У меня установлено несколько версий Java, как Sun JDK, так и JRockit, как 32-разрядных, так и 64-разрядных, и т. Д., И я столкнулся с этой проблемой при новой установке 64-разрядной версии Eclipse для Java EE (JUNO).

Что НЕ работает:

64-битное трио по предложению Питера Рэйдера:

Я использую 64-битный Eclipse на 64-битной ОС (Windows 7).

Я гарантировал, что Sun JDK 7 64-bit была версией Java по умолчанию. Когда я набрал "java -version" из командной строки (cmd.exe), был возвращен 64-битный Sun JDK 7 ...

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 работы:

Добавление опции -vm в eclipse.ini, как предложено Джаешем Каватией:

Я добавил следующее в eclipse.ini:

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

Замечания:

Мне не нужно было удалять какие-либо версии JDK или JRE на моем компьютере.

Солнечный Саркар
источник
Мне также не пришлось удалять JDK, но я решил очистить свою систему, чтобы устранить будущие причины ошибок. Я также упомянул аргументы VM и объяснил, почему они, очевидно, не могут работать на меня. Это ваш выбор, как вы хотите настроить свою систему, в зависимости от того, что вам действительно нужно.
Sjas
Я должен был сделать обе вещи, но добавление строки javaw.exe привело меня к установке всего на 64 бит, в любом случае. Это зависит от того, сколько кармы вы должны заплатить на андроид.
Джош
Я разрабатывал в течение многих лет, и без каких-либо изменений в моей системе (о которых я знаю), Eclipse выдает эту ошибку. Добавление опции -vm разобрало ее для меня, без необходимости изменять какие-либо другие настройки или что-либо / повторно / устанавливать.
Кносс
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) ).
  • Удалите путь к 32-битной версии Java из переменной окружения 'path'.

У меня установлены обе версии Java, но Eclipse продолжал пытаться использовать 32-битную.

misterfrb
источник
10

Конечно, вам нужна совместимая версия JDK и Eclipse, но вы также должны добавить в eclipse.iniфайл следующие строки:

-vm
yourdrive\java\bin

Сделайте им первые две строки вашего eclipse.iniфайла.

Дипак Тяги
источник
7

Как уже упоминали многие, это проблема 32 против 64 бит как для Eclipse, так и для Java . Вы не можете смешивать 32 и 64 бит. Поскольку Eclipse не использует JAVA_HOME, вам, вероятно, придется изменить PATH перед запуском Eclipse, чтобы убедиться, что вы используете не только соответствующую версию Java, но и 32- или 64-разрядную (или измените файл INI, как отметил Джаят). ,

Если вы устанавливаете Eclipse из общего ресурса компании, вы должны убедиться, что можете сказать, какую версию Eclipse вы распаковываете, и разархивировать в соответствующий каталог Program Files, чтобы отслеживать, какой из которых, а затем изменить PATH (либо навсегда через ( Windows) Панель управления -> Система или набор PATH=/path/to/32 or 64bit/java/bin;%PATH%(возможно, создайте командный файл, если вы не хотите устанавливать его в переменных вашей системы и / или пользовательской среды). Помните, 32-битная версия находится в файлах программы (x86) .

Если вы не уверены, просто запустите Eclipse, если вы получили ошибку, измените PATH на другую «битную» версию Java, а затем повторите попытку. Затем переместите каталог Eclipse в соответствующий каталог Program Files .

Марк Тауэрсап
источник
Это явно проблема, так как эта страница в настоящее время просматривает 700 тыс. Просмотров ... и год спустя, по-видимому, нет исправления, которое не включало бы поиск переменных среды только для запуска IDE!
Кьяран Галлахер
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-битных . Архитектура ОС не имеет значения, в то время как другие остаются на том же типе архитектуры.

Ignacio
источник
6

Ответы выше меня настолько меня соблазнили, что я решил пробовать все возможные комбинации с ОС, Eclipse и JVM trio. В любом случае, кто бы ни копался и читал мой пост, отметьте следующее как горячую точку (я пользователь Windows 7).

  1. Вы понимаете, что Program Files и Program File (x86) - это две разные папки ... x86 обозначает 32-битную версию программ, а первая - 64-битная версия.

  2. Если у вас установлено несколько версий Java с разной разрядностью и версиями выпуска, что неизбежно случается со многими IDE с открытым исходным кодом , менеджерами, административными консолями, лучший вариант - установить аргумент VM непосредственно в eclipse.iniфайле. Если вы этого не сделаете, Eclipse сойдет с ума и попытается найти себя, что не очень хорошо.

sayannayas
источник
5

Один из простых способов решить эту проблему - скопировать jreпапку из установленного JDK в папку установки Eclipse. Убедитесь, что JDK, с которого вы копируете, имеет ту же архитектуру, что и ваша установка Eclipse.

Я должен был сконфигурировать свою машину таким образом, потому что я запускаю Eclipse и Appcelerator Titanium Studio на своей машине. Студии нужна 32-битная Java, а Eclipse - 64-битная.

Майк Старов
источник
Я делал то же самое давным-давно, но для eclipse-jee-juno-SR1-win32 и Java6 я не смог заставить его работать, на этот раз. Вы также редактировали eclipse.ini с абсолютным путем к jre?
user77115
У меня также есть Eclipse 64 ширина jdk 7 64bit, но высокий титан мне не может загрузить jni shared dll.
Realtebo
Из-за сумасшедших автоматических обновлений Window, когда появляется обновление для JAVA, оно блокирует запуск моего Eclipe. Вышеуказанное решение - это самый простой способ работать независимо, не заботясь об автообновлениях. Спасибо!
Jyo The Whiff
4

Да, просто убедитесь, что ваши версии Eclipse и JDK являются 64-битными. Просто чтобы убедиться, что все правильно, удалите JDK и установите его в Program Files, а не в Program Files (x86) . По крайней мере, это решило мою проблему.

Jeena
источник
4

Просто проверьте переменную среды PATH. В « Мой компьютер» -> « Свойства» -> « Дополнительные параметры системы» -> « Переменные среды» -> (в левом верхнем окне «Пользовательские переменные для« какое-то имя ПК »») просто проверьте переменную PATH. Если он не существует, создайте его следующим образом -> C: \ Program Files (x86) \ Java \ jre7 \ bin <-

Я столкнулся с той же проблемой после обновления моего Eclipse. Я обнаружил, что путь запрашивал 64-битную версию, но у меня был 32-битный путь в diff. Это было полезно для меня. PS: у меня есть 64-битная ОС, 32-битная JRE и 32-битная Eclipse. Все отлично работает :)

user1600401
источник
4

Вы должны удалить все старые [JREs] [1], а затем установить самую новую ... У меня была та же проблема, и теперь я ее решаю. Я:

Лучше установить Jre 6 32 бит. Это реально работает.

Marcin Erbel
источник
3

Скачал 64-битную JVM с сайта, установил ее вручную и обновил переменную системного пути. Это решило проблему.

  1. В моей системе установлена ​​JVM по умолчанию в
    папке « C: \ Program Files (x86) \ Java \ jre7»
  2. Установленная вручную JVM была установлена ​​в "C: \ Program Files \ Java \ jre7", и после обновления этой записи в переменную системного пути она работала.
Satya
источник
3

Спасибо, misterfrb , я понял, что Eclipse выдает эту ошибку, потому что я только что установил пакет Oracle 10g Developer и искал jvm.dllфайл вC:\DevSuiteHome_1 папке (я должен был снова установить JDK вместе с комплектом разработчика).

После удаления строк DevSuiteHome из переменной paths и добавления местоположения коррекции для 64-битной системы jvm.dll(не уверен, было ли это необходимо, не пытался без него), Eclipse снова заработал, и Developer Suite продолжает работать.

Unegma
источник
3

Проще говоря, у меня установлена ​​64-разрядная ОС, 32-разрядная версия Eclipse и обе JDK 32 и 64 ... Я только что удалила 64-разрядную версию JDK, и Eclipse работает нормально ..

PushkarHJoshi
источник
3

У меня возникла та же проблема после обновления с Java 6 до Java 7. После того, как я удалил Java 6 (64-разрядная версия) и переустановил Java 7 (64-разрядная версия), Eclipse заработал. :)

Супун Самеера
источник
3

Крайне важно добавить параметр -vm и его значение в 2 строки В НАЧАЛЕ eclipse.ini

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

Рольф
источник
3

Я хочу найти другое решение для этой ошибки, особенно для тех, кто хочет использовать 32-битный и 64-битный Eclipse в одной системе.

Eclipse запустится с использованием JRE / JDK в jreподкаталоге, если он существует. (STS или другие 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

Убедитесь, что вы запускаете Eclipse с правами администратора.

Здесь, чтобы помочь
источник
2

Если вы используете целое 64-битное трио, и оно все еще не работает (я столкнулся с этой проблемой при запуске Android Monitor в Intellij Idea), возможно, используется неверный файл jvm.dll, в отличие от того, что ожидает ваш Java. Просто следуйте этим шагам:

  1. Найдите файл jvm.dll в вашем каталоге JRE: C:\Program Files\Java\jre7\server\bin\jvm.dll

  2. Найдите файл jvm.dll в каталоге JDK: c:\Program Files\Java\jdk1.7.0_xx\jre\bin\server\

  3. Скопируйте jvm.dllиз каталога JRE в каталог JDK и перезапишите jvm.dll в JDK.

Не забудьте сделать резервную копию, на всякий случай. Нет необходимости устанавливать или удалять что-либо, связанное с Java.

rootpd
источник
2

То же самое произошло со мной. У меня было 64-битное Eclipse, но мой JDK был 32-битным. Итак, я установил 64-битную версию, и сейчас все нормально.

felipe.zkn
источник
2

Я не уверен, почему, но я установил jre в мой каталог c: \ windows и java.exe и javaw.exe в моем каталоге windows \ system32.

Очевидно, что эти каталоги получили приоритет даже после добавления флага -vm в мой файл eclipse.ini.

Удаление их отсюда исправило проблему для меня.

Гай Лоу
источник
2

Вы изменили правильную версию JAVA_HOME и PATH в переменных среды.

Шридхар Г.С.
источник
1

На странице загрузки Eclipse должно быть написано «JRE 32 бит» или «JRE 64 бит», а не «Windows 32 бит» или «Windows 64 бит».

Обязательно используйте правильную версию, совместимую с вашим JDE, как уже было сказано ранее.

A_rnO
источник