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, в розірваній банці? У вас навіть є такий каталог (~ / .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-бітну спробу:

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/
Арт

2
Це вже другий раз, коли мені довелося це зробити: один раз на своєму робочому комп’ютері кілька місяців тому, і саме зараз на домашньому комп’ютері, обидва рази після місяців використання Eclipse без жодної проблеми. Чи є якісь конкретні причини, чому бібліотеки swt просто зникнуть?
jonhopkins

2
Це справжнє збереження життя! Зауважте, хто в ARM (як-от я запускаю Eclipse на Chromebook) повинен замінити "x86" на "arm", інакше це не працюватиме!
PoweredByRice

54

РЕШЕНО:

Оскільки я встановив Oracle Java 7, він змінив Java за замовчуванням на Oracle Java 7, однак це повинен бути Open JDK.

Щоб виправити, відкрийте термінал і введіть

sudo update-alternatives --config java

Це відкриває список різних типів Java. Просто виберіть Відкрити JDK.


7
але що робити, якщо ви хочете використовувати Oracle Java при затемненні, а не Open JDK, як це можна зробити? Дякую!
ultrajohn

це тому, що Oracle Java 7 більше не шукає рідної бібліотеки в Jars? У мене є та ж проблема з Windows з Java 7. програма
swt колись

Працював для мене на монетному дворі Linux.
rshahriar

1
Звичайно, якщо ви віддаєте перевагу FOSS, OpenJDK - це платформа вибору, але (як зазвичай це стосується корпоративних троглодитів) Oracle накладає певні гачки у своїй версії, що запобігає перенесенню деяких додатків (і більшості програм для веб-запуску java) між платформами java. Це перемагає головну ціль Java, а саме портативність, і саме тому вони стріляють собі в ногу, практикуючи фіксацію постачальника ... Хай живе Python! Довге життя!
venzen

44

Просто вкажіть шлях до бібліотек:

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

2
Здається, що це найчистіше рішення.
mspanc

1
Погодьтеся, найчистіший і цей метод назавжди уникне помилки в системі Ubuntu, схильній до змін версії Java - з огляду на побічний ефект оновлення OpenJDK для перенастроювання файлів, пов’язаних з Java
вензен

2
Дійсно для мене працював над 64-розрядним рішенням Ubuntu Cleanest, я рекомендую будь-кому вибрати це рішення замість створення символьних посилань
Toughy

це той, який слід використовувати, якщо ви використовуєте Oracle java 7, а не відкриваєте JDK
James Kirkby

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


Я зіткнувся з подібною помилкою в 64-бітній Linux, чи можете ви перевірити це питання, stackoverflow.com/questions/21980558/…
Допомагаючи.

3

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

спочатку каталог, а потім запустіть команду посилання:

Для 32 біт:

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

І на Ubuntu 12.04 64 біт:

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


2

Якщо ви почнете затемнення за допомогою oracle java, затем затемнення може виявитись невдалим у пошуку рідних бібліотек, таких як 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 Як я можу її вирішити?
Yonela Nuba

1

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


0

Переконайтеся, що ваш домашній розділ встановлений із виконаними правами доступу. Це за замовчуванням, але якщо ви зможете встановити його без опції exec, ви отримаєте цю помилку.


0

Можливо більш загальним методом є:

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


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.