Невозможно загрузить 64-битные библиотеки SWT на 32-разрядную JVM (заменяя SWT файл)
Я пытаюсь отладить эту проблему, но не знаю, где именно мне нужно заменить файл SWT jar для Eclipse.
Текущая конфигурация системы:
Eclipse Helios 3.6 - 32 Bit
JDK 1.6
JVM - 32 Bit
Windows 7 - 64 Bit
Сообщение об ошибке:
java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:194)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:174)
at org.eclipse.swt.internal.C.<clinit>(C.java:21)
at org.eclipse.swt.widgets.Display.<clinit>(Display.java:138)
at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:687)
at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:161)
at de.vogella.rcp.intro.first.Application.start(Application.java:18)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
An error has occurred. See the log file
Обход проблемы:
-
Link1: Понял причину проблемы, и я попытался заменить 64-битный SWT на 32 бит, но я не уверен, делаете это правильно?
загружен 32-разрядный файл swt-3.6.1-win32-win32-x86.zip
Извлечен zip файл
Файлы, показанные ниже
![enter image description here]()
скопированный файл swt.jar
переход на C:\Program Files\eclipse\plugins
удаленный 64-разрядный Swt файл (i.e org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c)
помещенный скопированный файл swt.jar и перезапущенный
Все еще бросает ОШИБКУ ОШИБКИ
также попытался переименовать файл swt.jar в org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c
Еще одна ОШИБКА
-
Link2: предложил альтернативное решение, но не смог решить проблему.
Еще одна ОШИБКА
-
Я действительно не хочу удалять 32-JVM и 32-бит Eclipse и устанавливать соответствующие 64-битные версии.
Не ОПЦИЯ
Обходной путь После ответа paulsm4 и Пол Вебстера и я запутался
Когда я попытался выполнить это, чтобы проверить JVM, версия JRE в Eclipse
package javaVersion;
public class JavaVersion
{
public static void main( String[] args )
{
System.out.println( "JRE Version :" + System.getProperty( "java.runtime.version" ) );
System.out.println( "JVM Bit size: " + System.getProperty( "sun.arch.data.model" ) );
}
}
Вывод:
1.6.0_31-b05
JVM Bit size: 32
Однако, когда я пробовал в командной строке для JAVA-VERSION
![enter image description here]()
Итак, моя система понимания имеет 64-битную JVM, где Eclispe читает 32-битную JVM. Итак, как я могу переадресовать систему на чтение 32-битного JVM?
Ответы
Ответ 1
Eclipse запускает ваше приложение с помощью любой JRE, определенной вами в конфигурации запуска. Поскольку вы запускаете 32-разрядный Eclipse, вы запускаете/отлаживаете его 32-битные библиотеки SWT, и вам нужно запустить 32-разрядную JRE.
Ваша 64-битная JRE по какой-либо причине имеет установленную по умолчанию JRE.
Чтобы изменить это, сначала убедитесь, что у вас установлен 32-разрядный JRE в настройке Установленные JRE. Перейдите в Окно → Настройки и перейдите к Java → Установленные JREs:
![Installed JREs]()
Вы можете нажать "Добавить" и перейти к 32-разрядной JVM JAVA_HOME
, чтобы добавить его.
Затем в вашей конфигурации запуска найдите приложение Eclipse и убедитесь, что Runtime JRE настроена на 32-разрядную JRE, которую вы только что сконфигурировали:
![Run Configuration]()
(Обратите внимание на выделение, которое слабо подсвечено.)
Не пытайтесь заменить банки SWT, которые, скорее всего, закончится плохо.
Ответ 2
Ну, duh:) SWT использует JNI... и JNI строго зависит от конкретной платформы.
Используйте 32-битные библиотеки с 32-разрядными JVM, 64-разрядными библиотеками с 64-разрядной JVM, убедитесь, что версии соответствуют точно и не смешивают 'n'match.
ИМХО...
PS:
Вы можете иметь несколько JVM и/или несколько Eclipse, совместно существующих в одном и том же поле.
Ответ 3
i удален
C:\ProgramData\Oracle\Java\javapath
с моего пути, и это сработало для меня.
и включите в свой путь адреса x64 JDK и JRE.
Ответ 4
Просто добавьте аргументы -d32 в VM в "Свойства конфигурации запуска запуска".
Ответ 5
Спасибо большое, ребята!
Я пропустил мою версию ECLIPSE VERSION 64Bit и 3.6
Мне нужно было убедиться, что 32Bit Eclipse, 32 Bit JVM, поэтому я удалил Eclipse и все JVM для чистого запуска. Установлено 32Bit JDK1.6 из здесь и 32Bit Eclipse из здесь
Ответ 6
Я только что заменил swt.jar в своем пакете с 64-битной версией, и он сразу сработал. Не нужно перекомпилировать весь пакет, просто замените файл swt.jar и убедитесь, что он содержит его манифест приложения.
Ответ 7
Я также столкнулся с той же проблемой давным-давно.
Вот решение
В Eclipse Нажмите "Windows" → "Настройки" ---- > "Java" --- > "Установленные JRE" ---- > Выберите JDK, нажмите "Изменить".
Проверьте свой путь JDK, соответствует ли ваш путь в переменных среды, определенных в системе.
если нет, то измените его на "путь", указанный в каталоге.
Ответ 8
Проверьте целевое определение, если вы работаете с проектом RCP-SWT.
Откройте целевой редактор и перейдите к определению среды. Там вы можете настроить архитектуру. Идея состоит в том, что, запустив приложение RCP, будут загружены только 32-битные библиотеки/пакеты SWT. Если у вас уже есть конфигурация времени выполнения, рекомендуется также создать новую.
![Редактор цели в Eclipse]()
Ответ 9
Я удалил C:\ProgramData\Oracle\Java\javapath с моего пути, и это сработало для меня.
Но не забудьте включить в свой путь адреса x64 JDK и JRE.
Ответ 10
Установите JDK.
Можно заставить Eclipse работать с JRE или, по крайней мере, раньше, но зачем беспокоиться? Eclipse намного счастливее с JDK.
Помните, что JRE, который используется для запуска Eclipse, не должен быть JRE, который Eclipse использует для запуска приложения.
PS. Я предполагаю, что исходная проблема с плакатом заключалась в том, что Eclipse запускался, а не (как некоторые другие ответы, по-видимому, обращаются), заставляя Eclipse запускать приложение.
Ответ 11
Я удалил C:\ProgramData\Oracle\Java\javapath с моего пути, и это сработало для меня.
Идеальный ответ, спасибо Никилу.