Eclipse nie może załadować bibliotek SWT

295

Za każdym razem, gdy próbuję otworzyć Eclipse w Ubuntu 12.04, pojawia się błąd niezadowolonego łącza i nie można go otworzyć. Niedawno zainstalowałem Java JDK i Android SDK, czy to może być problem? Wykonałem ten samouczek .

Oto informacje z dziennika:

!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)

Próbowałem odinstalować i ponownie zainstalować i usunąć ~/.eclipsekatalog, ale nadal nie działa

TomRichardson
źródło
Muszę powiedzieć, że twoja ścieżka do biblioteki wygląda dziwnie. Czy te pliki .so nie powinny znajdować się gdzieś w folderze eclipse / plugins w rozłożonym słoju? Czy w ogóle masz taki katalog (~ / .swt / lib / ...)?
Marko Topolnik
Czy zainstalowałeś libswt-java-gtk3?
Federico Vera,
Chociaż odpowiedź na to pytanie poniżej, wydaje się, że to błąd w systemie instalacyjnym Ubuntu, który powinien zostać podniesiony, ponieważ utrzymuje się, nawet jeśli odinstaluję i ponownie zainstaluję Eclipse za pomocą aptitude / apt-get. Jeśli jest link do tego problemu, dobrze byłoby podać go tutaj, aby ludzie mogli go głosować.
android.weasel

Odpowiedzi:

661

na moim Ubuntu 12.04 32 bit . Edytuję polecenie, aby:

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

W wersji 64-bitowej Ubuntu 12.04 spróbuj:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
Scott
źródło
4
Wykonałem to polecenie dokładnie tak, jak masz i zadziałało! Ubuntu 12.04 z Oracle Java 7
MJ
2
Wolę tę metodę, ponieważ muszę użyć Oracle Java 7 do projektu
rojanu
2
Dziękuję Ci. Moja ścieżka była nieco inna, ale to mnie naprawiło. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Art.
2
To drugi raz, gdy musiałem to zrobić: raz na komputerze służbowym kilka miesięcy temu, a teraz na komputerze domowym, dwa razy po miesiącach używania Eclipse bez żadnego problemu. Czy są jakieś szczególne powody, dla których biblioteki SWT po prostu zniknęły?
jonhopkins
2
To prawdziwa oszczędność życia! Pamiętaj, że ktokolwiek na ARM (jak ja z Eclipse na Chromebooku) powinien zamienić „x86” na „uzbrojenie”, inaczej nie zadziała!
PoweredByRice
54

ROZWIĄZANY:

Ponieważ zainstalowałem Oracle Java 7, zmieniłem domyślną Javę na Oracle Java 7, jednak musiał to być Open JDK.

Aby to naprawić, otwórz terminal i wpisz

sudo update-alternatives --config java

Spowoduje to wyświetlenie listy różnych typów Java. Po prostu wybierz Open JDK.

TomRichardson
źródło
7
ale co jeśli chcesz używać Oracle Java z zaćmieniem, a nie Open JDK, jak to zrobić? dzięki!
ultrajohn
to dlatego, że Oracle Java 7 nie szuka już natywnej biblioteki w Jars? Mam ten sam problem również w systemie Windows z Javą 7. program
SWT
Pracowałem dla mnie dla Linuksa Maya Maya.
rshahriar
1
Oczywiście, jeśli wolisz FOSS, OpenJDK jest platformą z wyboru, ale (jak zwykle w przypadku tych korporacyjnych troglodytów) Oracle nakłada pewne haki w swojej wersji, które uniemożliwiają przenoszenie niektórych aplikacji (i większości aplikacji JavaStart Webstart) między platformami Java. To pokonuje główny cel Javy, mianowicie przenośność, dlatego strzelają sobie w stopę, ćwicząc blokadę dostawcy ... Niech żyje Python! Długie życie!
venzen
44

Po prostu określ ścieżkę do bibliotek:

echo "-Djava.library.path=/usr/lib/jni/" >> /etc/eclipse.ini
dzlatkov
źródło
2
Wydaje się, że jest to najczystsze rozwiązanie.
mspanc 19.04.13
1
Zgadzam się, najczystszy, a ta metoda na stałe pozwoli uniknąć błędu w systemie Ubuntu, który jest podatny na zmiany wersji Java - biorąc pod uwagę efekt uboczny aktualizacji OpenJDK w celu zmiany konfiguracji lokalizacji plików związanych z java
venzen
2
Pracowałem dla mnie w 64-bitowym Najczystszym rozwiązaniu Ubuntu, polecam każdemu wybranie tego rozwiązania zamiast tworzenia dowiązań symbolicznych
Toughy
jest to ten, którego należy użyć, jeśli używasz Javy 7 Oracle i nie otwierasz JDK
James Kirkby
Najczęściej głosowana odpowiedź działa, ale nie w przypadku „zaćmienia sudo”. Ta odpowiedź jest lepsza, działa we wszystkich przypadkach!
PoweredByRice
14

W moim przypadku brakowało mi /usr/lib/jnikatalogu całkowicie. Naprawione przez

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

Nie ma potrzeby późniejszego tworzenia dowiązań symbolicznych. Zaćmienie rozpoczęło się normalnie.

Trenton
źródło
2
Po zainstalowaniu jni. Skopiowałem pliki za pomocą tej komendy dla wersji 32-bitowej: ln -s / usr / lib / jni / libswt- * ~ / .swt / lib / linux / x86 /
padman
1
W moim przypadku potrzebowałem sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks
4
Nie można załadować biblioteki: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Nie można załadować biblioteki: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

wygląda na to, że biblioteki powinny być w .swt / lib / linux / x86_64 / jeśli nie ma, możesz wypróbować to polecenie:

zlokalizuj libswt-gtk.so

powinno to znaleźć biblioteki kopiujące cały katalog do /home/tom/.swt/lib/linux/x86_64

szeryf
źródło
Mam do czynienia z podobnym błędem w Linuksie 64-bitowym, czy możesz sprawdzić to pytanie, stackoverflow.com/questions/21980558/…
Pomocna dłoń ..
3

Zgadzam się ze Scottem, co wymieniał, działało. Jednak samo uruchomienie go z dowolnego katalogu nie działało. Musiałem cd do plików / home / * /.swt/lib/linux/x86_64/0

najpierw katalog, a następnie uruchom polecenie link:

Dla wersji 32-bitowej:

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

A na Ubuntu 12.04 64 bit:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
leroneb
źródło
3

Na redhat7:

yum install gtk2 libXtst xorg-x11-fonts-Type1

wykonał robotę z powodu zależności SWT.

znaleziono tutaj

użytkownik1767316
źródło
2

Jeśli zaczniesz zaćmienie za pomocą Javy, zaćmienie może nie być w stanie znaleźć bibliotek rodzimych, takich jak biblioteki SWT lub SVN. Biblioteki SWT-JNI znajdują się w / usr / lib / jni /, a biblioteki SVN-JNI znajdują się w / usr / lib / x86_64-linux-gnu / jni /.

Zamiast zaczynać zaćmienie za pomocą polecenia

eclipse

możesz użyć polecenia

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

przekazać zmienną środowiskową LD_LIBRARY_PATH do zaćmienia. Eclipse znajdzie biblioteki natywne i będzie działał poprawnie.

użytkownik 1460856
źródło
To daje mi ten błąd. 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 Jak mogę go rozwiązać?
Yonela Nuba,
1

Ten błąd natrafiłem na próbę uruchomienia 32-bitowej wersji Eclipse pod 64-bitowym linuksem. Problem został rozwiązany po zainstalowaniu pakietu ia32-libs.

lancha90
źródło
0

Upewnij się, że partycja domowa jest zamontowana z uprawnieniami do wykonywania. Jest to ustawienie domyślne, ale jeśli zdarzy się zamontować go bez opcji exec, pojawi się ten błąd.

Martin B.
źródło
0

Prawdopodobnie bardziej ogólną metodą jest:

  • zainstaluj bezgłową wersję openjdk,
  • zainstaluj, uruchom i zamknij zaćmienie.
  • odinstaluj openjdk
  • zainstaluj JDK oracle
użytkownik1767316
źródło
0

W przypadku Windows Subsystem for Linux (WSL) będziesz potrzebować

apt install libswt-gtk-4-jni

Jeśli nie masz OpenJDK 8, będziesz także potrzebować

apt install openjdk-8-jdk
ATorras
źródło