Eclipse не может загрузить библиотеки SWT


295

Каждый раз, когда я пытаюсь открыть Eclipse в Ubuntu 12.04, я получаю сообщение об ошибке неудовлетворенного соединения, и оно не открывается. Я недавно установил java JDK и Android SDK, может ли это быть проблемой? Я следовал этому уроку .

Вот информация журнала:

!SESSION 2012-04-15 21:05:46.902 -----------------------------------------------
eclipse.buildId=I20110613-1736
java.version=1.7.0
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_GB
Command-line arguments:  -os linux -ws gtk -arch x86_64

!ENTRY org.eclipse.osgi 4 0 2012-04-15 21:05:47.885
!MESSAGE Application error
!STACK 1
java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
no swt-gtk-3740 in java.library.path
no swt-gtk in java.library.path
Can't load library: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Can't load library: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

at org.eclipse.swt.internal.Library.loadLibrary(Library.java:285)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:194)
at org.eclipse.swt.internal.C.<clinit>(C.java:21)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54)
at org.eclipse.swt.widgets.Display.<clinit>(Display.java:132)
at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:695)
at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:161)
at org.eclipse.ui.internal.ide.application.IDEApplication.createDisplay(IDEApplication.java:153)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:95)
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:344)
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:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

Я попытался удалить и переустановить, а также удалить ~/.eclipseкаталог, но он по-прежнему не работает


Я должен сказать, что ваш путь к библиотеке выглядит странно. Разве эти файлы .so не должны находиться где-нибудь в папке eclipse / plugins, внутри разобранного jar-файла? У вас даже есть такой каталог (~ / .swt / lib / ...)?
Марко Топольник

Вы установили libswt-java-gtk3?
Федерико Вера

Несмотря на то, что на этот вопрос ответили ниже, похоже, что это остается ошибкой в ​​системе установки Ubuntu, которую следует устранить, поскольку она сохраняется, даже если я удаляю и переустанавливаю eclipse с помощью aptitude / apt-get. Если есть ссылка на этот вопрос, было бы неплохо предоставить ее здесь, чтобы люди могли проголосовать за нее.
android.weasel

Ответы:


661

на моем Ubuntu 12.04 32 бит . Я редактирую команду, чтобы:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/

А на Ubuntu 12.04 64 bit попробуй:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/

4
Я выполнил эту команду именно так, как она у вас, и она сработала! Ubuntu 12.04 с Oracle Java 7
MJ

2
Я предпочитаю этот метод, так как я должен использовать Oracle Java 7 для проекта
rojanu

2
Спасибо. Мой путь был немного другим, но это исправило это для меня. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Art

2
Это второй раз, когда мне приходилось делать это: один раз на моем рабочем компьютере несколько месяцев назад и только сейчас на моем домашнем компьютере, оба раза после нескольких месяцев использования Eclipse без единой проблемы. Есть ли какие-то конкретные причины, по которым библиотеки SWT просто исчезают?
Джонопкинс

2
Это реальный спасатель жизни! Обратите внимание, кто бы ни использовал ARM (например, я использую Eclipse на Chromebook), он должен заменить «x86» на «arm», иначе он не будет работать!
PoweredByRice

54

РЕШИТЬ:

Поскольку я установил Oracle Java 7, он заменил Java по умолчанию на Oracle Java 7, однако это должен был быть Open JDK.

Чтобы исправить, откройте терминал и введите

sudo update-alternatives --config java

Это поднимает список различных типов Java. Просто выберите Open JDK.


7
но что, если вы хотите использовать Oracle Java с затмением, а не Open JDK, как можно это сделать? Спасибо!
Ультра Джон

это потому, что Oracle Java 7 больше не ищет нативную библиотеку в Jars? У меня та же проблема на окнах с Java 7, а также. Программа
SWT

Работал для меня на Linux Mint Maya.
rshahriar

1
Конечно, если вы предпочитаете FOSS, OpenJDK является предпочтительной платформой, но (как обычно с этими корпоративными троглодитами) Oracle налагает определенные хуки в своей версии, которые предотвращают перенос некоторых приложений (и большинства приложений Java-запуска) между платформами Java. Это побеждает основную цель Java, а именно переносимость, поэтому они стреляют себе в ногу, практикуя блокировку вендора ... Да здравствует Python! Да здравствует!
Венцен

44

Просто укажите путь к библиотекам:

echo "-Djava.library.path=/usr/lib/jni/" >> /etc/eclipse.ini

2
Кажется, это самое чистое решение.
mspanc

1
Согласитесь, очистите, и этот метод навсегда предотвратит ошибку в системе Ubuntu, которая подвержена изменениям версии Java - учитывая побочный эффект обновлений OpenJDK для перенастройки расположения файлов, связанных с Java
venzen

2
Я действительно работал над 64-битным решением Ubuntu Cleanest, я рекомендую всем выбрать это решение вместо создания символических ссылок
Toughy

это тот, который нужно использовать, если вы используете oracle java 7 и не открываете JDK
Джеймс Киркби

Ответ с наибольшим количеством голосов работает, но не для того, когда вы "зато затмения". Этот ответ выше, он работает во всех случаях!
PoweredByRice

14

В моем случае я пропустил /usr/lib/jniкаталог полностью. Исправлено

sudo apt-get install libswt-gtk-3-jni libswt-gtk-3-java

Не нужно символическую ссылку потом. Затмение началось нормально.


2
После установки JNI. Я скопировал файлы, используя эту команду для 32-битной версии: ln -s / usr / lib / jni / libswt- * ~ / .swt / lib / linux / x86 /
padman

1
В моем случае мне потребовалось sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks

4
Не удается загрузить библиотеку: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Не могу загрузить библиотеку: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

похоже, что библиотеки должны быть в .swt / lib / linux / x86_64 /, если их там нет, вы можете попробовать эту команду:

найдите libswt-gtk.so

это должно найти библиотеки скопировать весь каталог в /home/tom/.swt/lib/linux/x86_64


я сталкиваюсь с подобной ошибкой в ​​Linux 64-битной, вы можете проверить этот вопрос, stackoverflow.com/questions/21980558/…
Helping Hand ..

3

Я согласен со Скоттом, что он перечислил работал. Однако просто запустить его из любого каталога не сработало. Мне пришлось перейти на файлы / home / * /.swt/lib/linux/x86_64/ 0

сначала каталог, а затем запустите команду ссылки:

Для 32 бит:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/

А на Ubuntu 12.04 64 bit:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/


2

Если вы запустите eclipse, используя oracle java, то eclipse может не найти собственные библиотеки, такие как библиотеки SWT или SVN. Библиотеки SWT-JNI находятся в / usr / lib / jni /, а библиотеки SVN-JNI находятся в / usr / lib / x86_64-linux-gnu / jni /.

Вместо запуска затмения с помощью команды

eclipse

вы можете использовать команду

env LD_LIBRARY_PATH=/usr/lib/jni/:/usr/lib/x86_64-linux-gnu/jni/:$LD_LIBRARY_PATH eclipse

передать переменную среды LD_LIBRARY_PATH для затмения. Eclipse найдет нативные библиотеки и будет работать правильно.


Это дает мне эту ошибку. Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0 WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.eclipse.osgi.internal.baseadaptor.BaseStorage (file:/usr/lib/eclipse/plugins/org.eclipse.osgi_3.8.1.dist.jar) to method java.net.URLClassLoader.addURL(java.net.URL) WARNING: Please consider reporting this to the maintainers of org.eclipse.osgi.internal.baseadaptor.BaseStorage Как я могу ее решить?
Йонела Нуба

1

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


0

Пожалуйста, убедитесь, что ваш домашний раздел смонтирован с исполняемыми разрешениями. Это значение по умолчанию, но если вам случится смонтировать его без опции exec, вы получите эту ошибку.


0

Возможно, более общий метод заключается в следующем:

  • установить не головную версию openjdk,
  • установить, запустить и закрыть затмение.
  • удалить openjdk
  • установить JDK оракула


0

Для подсистемы Windows для Linux (WSL) вам потребуется

apt install libswt-gtk-4-jni

Если у вас нет OpenJDK 8, вам также понадобится

apt install openjdk-8-jdk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.