Eclipse non può caricare librerie SWT


295

Ogni volta che provo ad aprire Eclipse in Ubuntu 12.04 ricevo un errore di collegamento insoddisfatto e non si apre. Di recente ho installato java JDK e Android SDK, potrebbe essere questo il problema? Ho seguito questo tutorial .

Ecco le informazioni del registro:

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

Ho provato a disinstallare, reinstallare e rimuovere la ~/.eclipsedirectory ma non funziona ancora


Devo dire che il percorso della tua biblioteca sembra strano. Questi file .so non dovrebbero trovarsi da qualche parte all'interno della cartella eclipse / plugins, all'interno di un barattolo esploso? Hai anche una tale directory (~ / .swt / lib / ...)?
Marko Topolnik,

Hai installato libswt-java-gtk3?
Federico Vera,

Anche se questa è una risposta di seguito, sembra che rimanga un bug nel sistema di installazione di Ubuntu che dovrebbe essere sollevato, perché persiste anche se disinstallo e reinstallo eclipse usando aptitude / apt-get. Se c'è un collegamento a quel problema, sarebbe bene fornirlo qui in modo che la gente potesse votarlo.
android.weasel,

Risposte:


661

sul mio Ubuntu 12.04 a 32 bit . Modifico il comando per:

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

E su Ubuntu 12.04 64 bit provare:

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

4
Ho eseguito quel comando esattamente come lo hai e ha funzionato! Ubuntu 12.04 con Oracle Java 7
MJ

2
Preferirò questo metodo poiché devo usare Oracle Java 7 per un progetto
rojanu,

2
Grazie. Il mio percorso era leggermente diverso ma questo mi ha risolto. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Art

2
Questa è la seconda volta che devo farlo: una volta sul mio computer di lavoro qualche mese fa, e proprio ora sul mio computer di casa, entrambe le volte dopo mesi di utilizzo di Eclipse senza un singolo problema. C'è qualche motivo particolare per cui le librerie swt sparirebbero?
jonhopkins,

2
Questo è un vero salvavita! Nota che chiunque su ARM (come me con Eclipse su Chromebook) dovrebbe sostituire "x86" con "arm", altrimenti non funzionerà!
PoweredByRice

54

Risolto:

Poiché avevo installato Oracle Java 7, aveva cambiato il Java predefinito in Oracle Java 7, tuttavia doveva essere Open JDK.

Per risolvere, apri il terminale e digita

sudo update-alternatives --config java

Questo fa apparire un elenco dei diversi tipi di Java. Basta selezionare Open JDK.


7
ma cosa succede se si desidera utilizzare Oracle Java con eclipse e non Open JDK, come si può fare? Grazie!
ultrajohn

è perché Oracle Java 7 non cerca più la libreria nativa in Jars? Ho lo stesso problema anche su Windows con Java 7. il programma
SWT

Ha funzionato per me per Linux Mint Maya.
rshahriar,

1
Naturalmente, se preferisci FOSS, OpenJDK è la piattaforma preferita, ma (come al solito con questi trogloditi aziendali) Oracle impone alcuni hook nella loro versione che impediscono il porting di alcune app (e la maggior parte delle app webstart java) tra piattaforme java. Questo sconfigge l'obiettivo principale di Java, vale a dire la portabilità, motivo per cui si stanno sparando ai piedi praticando il lock-in del fornitore ... Long Live the Python! Lunga vita!
venzen,

44

Basta specificare il percorso delle librerie:

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

2
Sembra che questa sia la soluzione più pulita.
mspanc,

1
D'accordo, più pulito e questo metodo eviterà permanentemente l'errore su un sistema Ubuntu soggetto a modifiche alla versione Java - dato l'effetto collaterale degli aggiornamenti OpenJDK per riconfigurare le posizioni dei file relativi a Java
Venzen,

2
Ha funzionato per me sulla soluzione più pulita di Ubuntu a 64 bit, consiglio a chiunque di scegliere questa soluzione invece di creare i collegamenti simbolici
Toughy

questo è quello da usare se usi oracle java 7 e non apri JDK
James Kirkby,

La risposta più votata funziona, ma non per "sudo eclipse". Questa risposta è superiore, funziona in tutti i casi!
PoweredByRice

14

Nel mio caso, mi mancava del /usr/lib/jnitutto la directory. Risolto da

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

Non è necessario ricollegare in seguito. Eclipse è iniziato normalmente.


2
Dopo aver installato jni. Ho copiato i file usando questo comando per 32 bit: ln -s / usr / lib / jni / libswt- * ~ / .swt / lib / linux / x86 /
padman

1
Nel mio caso, avevo bisogno di sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks

4
Impossibile caricare la libreria: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Impossibile caricare la libreria: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

sembra che le librerie dovrebbero essere in .swt / lib / linux / x86_64 / se non ci sono puoi provare questo comando:

individuare libswt-gtk.so

questo dovrebbe trovare le librerie copiare l'intera directory in /home/tom/.swt/lib/linux/x86_64


sto affrontando un errore simile in Linux a 64 bit, puoi controllare questa domanda, stackoverflow.com/questions/21980558/…
Helping Hand ..

3

Sono d'accordo con Scott, ciò che ha elencato ha funzionato. Tuttavia, semplicemente eseguirlo da qualsiasi directory non ha funzionato. Ho dovuto eseguire il cd nei file / home / * /.swt/lib/linux/x86_64/ 0

prima directory e quindi eseguire il comando link:

Per 32 bit:

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

E su Ubuntu 12.04 64 bit:

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

3

Su redhat7:

yum install gtk2 libXtst xorg-x11-fonts-Type1

ha fatto il lavoro, a causa di una dipendenza swt.

trovato qui


2

Se avvii eclipse usando oracle java, eclipse potrebbe non riuscire a trovare librerie native come librerie SWT o SVN. Le librerie SWT-JNI si trovano in / usr / lib / jni / e le librerie SVN-JNI si trovano in / usr / lib / x86_64-linux-gnu / jni /.

Invece di avviare l'eclissi con il comando

eclipse

puoi usare il comando

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

per passare la variabile d'ambiente LD_LIBRARY_PATH all'eclissi. Eclipse troverà le librerie native e funzionerà correttamente.


Questo mi dà questo errore 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 Come posso risolverlo?
Yonela Nuba,

1

Mi sono imbattuto in questo errore quando ho provato ad avviare la compilazione a 32 bit di Eclipse su Linux a 64 bit. Il problema è stato risolto dopo l'installazione del pacchetto ia32-libs.


0

Assicurarsi che la partizione principale sia montata con autorizzazioni eseguibili. Questo è il valore predefinito, ma se ti capita di montarlo senza l'opzione exec, otterrai questo errore.


0

Un metodo forse più generico è:

  • installa la versione senza testa di openjdk,
  • installa, esegui e chiudi eclipse.
  • disinstallare openjdk
  • installa l'oracle JDK


0

Per il sottosistema Windows per Linux (WSL) è necessario

apt install libswt-gtk-4-jni

Se non si dispone di un OpenJDK 8, è necessario anche

apt install openjdk-8-jdk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.