Помилка завантаження спільної бібліотеки JNI (JDK)


928

Коли я намагаюся відкрити Eclipse , у спливаючому діалоговому вікні зазначено:

Помилка завантаження спільної бібліотеки JNI "C: /JDK/bin/client/jvm.dll" `.

Після цього сила затемнення закривається.

Ось декілька моментів, які я хотів би зробити:

  • Я перевірив, чи існує щось на цьому шляху. Воно існує.
  • My Eclipse та Java SE Kit Kit - це 64-розрядні. Я перевірив свою систему, і вона може обробляти 64-розрядні.
  • Я шукав цю проблему в Google і в Stack Overflow, і знайшов єдину відповідь - завантажити 32-бітні версії JDK і Eclipse.

Завантаження 32-бітних версій - це те, що я хочу зробити лише в крайньому випадку.
Що б запропонували вирішити це питання?


У чому саме була проблема у вашому випадку?
sjas

4
На мій подив, на мій комп'ютер встановлено 5 або більше Java. Мало того, але виявилося, що я завантажив 32-розрядний Eclipse випадково. Отже, я видалив кожну наявну Java, видалив Eclipse (у Eclipse немає «видалення») та завантажив 64-розрядну програму Eclipse Classic для моєї машини разом із 64-бітною Java (див. Відповідь SPP на це посилання).
Mxyk

2
Крім того: якщо у когось є проблеми з "видаленням" Eclipse (наприклад, папка не вийде незалежно від того, скільки разів ви видалите її вручну або за допомогою командного рядка), спробуйте видалити її в безпечному режимі з командним рядком. Я не маю уявлення чому мені довелося це робити, але це закінчилось.
Mxyk

@MikeGates У мене теж була ця проблема, я використовував LockHunter. Відверто. Запуск цього інструмента для роботи в Windows - це занадто велика робота.
jcollum

Eclipse / Java смокче, якщо мова йде про 64-бітові, то це ганьба ... Найкраща порада, яку я можу дати, - це дотримуватися лише 32 біт. Економте купи часу.
onknows

Відповіді:


848

Вам потрібно 64-bitтріо:

  • 64-bit ОС
  • 64-bit Java
  • 64-bit Затемнення

Пояснення : Уявіть, що в програму завантажується нативний код (DLL). Тепер уявіть, що 32-бітна функція хоче викликати 64-бітну або подібну. Те саме з вирівнюванням і розмірами даних, і все. Я думаю, я не повинен розповідати нічого більше = P
imacake

@androiddeveloper Я думаю, ви змішуєте кілька версій Java. Спробуйте використовувати лише трійку 64.
Похмурий

Правильно! Мій ноутбук працює на операційній системі x64, але я встановив x86 JDK. Щойно встановлений x64 jdk і проблема відходить. Дякую.
Нгуен Мінь Бінь

Ця відповідь насправді не зовсім точна. Вам не потрібно запускати 64-розрядні JDK та 64-розрядні Eclipse, якщо ви працюєте на 64-бітній ОС. 64-розрядна ОС може так само добре запустити комбо 32-бітного Java + 32-бітного Eclipse. Що повинно відповідати - це укуси JRE / JDK та Eclipse.
E-Riz

1
@Tarik так, його 2015 рік і, на жаль, редактор візуальних сторінок (VPE) інструментів JBoss Tool ще роками чекає на 64-розрядне оновлення. Подивіться на відповідь "Робочі пари" нижче, на другу пару. Інструмент JBoss Tools-Plug-in прив'язаний до тієї ж архітектури, яку ви завантажили Eclipse. Отже Eclipse (з JBossTools) повинен бути 32-бітовим, JDK повинен бути 32-бітним, а ОС може бути 64-бітною. 64-бітове затемнення в даний час не працює з інструментами JBoss .... Я пам'ятаю проект під назвою JBossIDE, який працює за допомогою Eclipse, ви повинні використовувати це замість того, щоб встановлювати JBossTools у затемнення. Ганьба вам 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, встановив лише 64-розрядний JDK + JRE 1.7.

Один з "установок" 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 .


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файл можна знайти в папці затемнення .


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-розрядні). Я був готовий видалити та перевстановити 64-розрядний Eclipse, але, схоже, SDK java 7 включає деякий новий інтелект для кращого запуску 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. Не використовуйте цитати; пробіли дозволені.


Привіт, я працюю з деякого часу тому з цим налаштуванням. 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 повинні бути однаковими.)


Хороші варіанти, але додавання його до ini-файлу, як зазначено вище, має спрацювати
mr.user1065741

2
Не потрібно змінювати .ini файл. Просто використовуйте 64-бітне комбо для Java та затемнення
thanos.a

29

У мене встановлено кілька версій Java, і Sun JDK & JRockit, і 32-бітні, і 64-розрядні, і т.д.

Що НЕ працювало:

64-бітове тріо за пропозицією Пітера Радера:

Я використовую 64-бітний Eclipse в 64-розрядної ОС (Windows 7).

Я переконався, що Sun JDK 7 64-розрядною версією Java стала за замовчуванням. Коли я набрав "java -version" з командного рядка (cmd.exe), 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 :

Додавання параметра -vm до eclipse.ini, як запропонував Джейеш Каватія:

Я додав у eclipse.ini таке:

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

Примітка:

Мені не довелося видаляти будь-яку з різних версій JDK або JRE, які я маю на своїй машині.


Мені також не довелося видаляти JDK, але я вирішив очистити свою систему, щоб усунути майбутні причини помилок. Я також згадав аргументи В.М. і пояснив, чому вони, очевидно, не можуть працювати на мене. Це ваш вибір, як ви хочете налаштувати вашу систему, залежно від того, що вам справді потрібно.
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

У мене була схожа проблема. Це було вирішено, роблячи наступне.

  • Перемістіть затемнення до програмних файлів (не до програмних файлів (x86) ).
  • Видаліть шлях до 32-бітної версії Java зі змінної середовища "path".

У мене встановлені обидві версії Java, але Eclipse намагався використовувати 32-бітну.


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, як зазначив Jayath) .

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

Якщо ви не впевнені, просто запустіть Eclipse, якщо ви отримаєте помилку, змініть свій PATH на іншу "бітну" версію Java, а потім спробуйте ще раз. Потім перемістіть каталог Eclipse у відповідний каталог програмних файлів .


Очевидно, це проблема, оскільки ця сторінка наразі переглядає 700 тис. Доларів ... і через рік, мабуть, немає жодних виправлень, що не передбачає перекочування в змінних оточення просто для того, щоб запустити IDE!
Ciaran Gallagher

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

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

  1. Ви розумієте, що програмні файли та програмний файл (x86) - це дві різні папки ... x86 означає 32-бітну версію програм, а перша - 64-бітна версія.

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


5

Один з найпростіших способів вирішити це - скопіювати jreпапку з встановленого JDK в інсталяційну папку Eclipse. Переконайтеся, що JDK, з якого ви копіюєте, має таку ж архітектуру, що і ваша установка Eclipse.

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


Я робив те ж саме давно, але для eclipse-jee-juno-SR1-win32 та Java6 я не міг змусити його працювати, на цей раз. Ви також редагували eclipse.ini з абсолютним шляхом до jre?
користувач77115

У мене також є Eclipse 64 ширина jdk 7 64bit, але титан у мене високий, він не може завантажити jni shared dll.
realtebo

Через божевільні автоматичні оновлення Window, коли є оновлення для JAVA, це блокує запуск мого Eclipe. Вищевказане рішення - це найпростіший спосіб самостійної роботи, не піклуючись про автоновлення. Дякую!
Jyo the

4

Так, просто переконайтеся, що ваші версії Eclipse та JDK обидва 64-розрядні. Просто переконайтесь, що все правильно видалено JDK та встановіть його у файлах програми, а не у програмних файлах (x86) . Принаймні, це вирішило мою проблему.


4

Просто перевірте змінну середовища PATH. У розділі Мій комп'ютер -> Властивості -> Додаткові параметри системи -> Змінні середовища -> (ліве верхнє вікно "Змінні користувача для" деякого імені ПК "") просто перевірте змінну PATH. Якщо його немає, створіть його за допомогою наступного -> C: \ Program Files (x86) \ Java \ jre7 \ bin <-

Я зіткнувся з тією ж проблемою після того, як оновив Eclipse. Я виявив, що шлях запитував 64-бітну версію, але у мене був 32-бітний шлях у dif. Це було мені корисно. PS: У мене 64-бітна ОС, 32-розрядна JRE та 32-бітна Eclipse. Все працює чудово :)


4

Вам слід видалити всі старі [JRE] [1], а потім встановити найновіший ... У мене була така ж проблема, і зараз я її вирішую. Я:

Краще встановіть 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 , і він шукав jvm.dllфайл у C:\DevSuiteHome_1папці (я, мабуть, вирішив знову встановити JDK разом із набором для розробників).

Після вилучення рядків DevSuiteHome зі змінної шляхів та додавання місця корекції для 64-розрядних jvm.dll(не впевнений, що це потрібно, не намагайтеся без цього), Eclipse знову працював, і набір розробників все ще робить це.


3

Просто, у мене встановлена ​​64-розрядна ОС, 32-розрядна програма Eclipse та обидва JDK 32 та 64 ... Я просто видалив 64-бітний JDK, і Eclipse працює нормально.


3

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


3

Важливо додати параметр -vm та його значення на 2 рядки НА ПОЧАТКУ eclipse.ini

-vm C: \ програмні файли \ Java \ jdk1.7.0_45 \ bin \ javaw.exe


3

Я хочу надати ще одне рішення для цієї помилки, особливо для тих, хто хоче використовувати 32-розрядні та 64-бітні Eclipse в одній системі.

Eclipse запуститься за допомогою JRE / JDK в jreпідкаталозі, якщо він існує. (STE або інша 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: \ Програмні файли \ Java \ jdk1.8.0"

До речі, з'єднання видалення каталогу НЕ видалить жоден файл. Якщо ви створили неправильне посилання, ви можете видалити його за допомогою провідника файлів або rmdirкоманди.

rmdir "d: \ devTool \ eclipse \ jre"



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.


2

Те саме сталося і зі мною. У мене було 64-бітове Eclipse, але мій JDK був 32-розрядним. Тому я встановив 64-бітну версію, і зараз це нормально.


2

Я не впевнений, чому, але у мене було встановлено jre в моєму каталозі c: \ windows і java.exe та javaw.exe в моєму каталозі Windows \ system32.

Очевидно, ці каталоги отримували пріоритет навіть ПІСЛЯ додавання прапора -vm до мого файлу eclipse.ini.

Видалити їх звідси виправили проблему для мене.



1

На сторінці завантаження Eclipse слід записати "JRE 32 біт" або "JRE 64 біт", а не "Windows 32 біт" або "Windows 64 біт".

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.