Eclipse kann keine SWT-Bibliotheken laden

295

Jedes Mal, wenn ich versuche, Eclipse in Ubuntu 12.04 zu öffnen, wird ein unbefriedigter Linkfehler angezeigt, der nicht geöffnet wird. Ich habe kürzlich das Java JDK und das Android SDK installiert. Könnte dies das Problem sein? Ich habe dieses Tutorial befolgt .

Hier ist die Protokollinfo:

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

Ich habe versucht, das ~/.eclipseVerzeichnis zu deinstallieren, neu zu installieren und zu entfernen, aber es funktioniert immer noch nicht

TomRichardson
quelle
Ich muss sagen, Ihr Bibliothekspfad sieht seltsam aus. Sollten sich diese .so-Dateien nicht irgendwo im Ordner eclipse / plugins befinden, in einem explodierten Glas? Haben Sie überhaupt ein solches Verzeichnis (~ / .swt / lib / ...)?
Marko Topolnik
Haben Sie libswt-java-gtk3 installiert?
Federico Vera
Obwohl dies unten beantwortet wird, scheint dies ein Fehler im Ubuntu-Installationssystem zu bleiben, der behoben werden sollte, da er auch dann bestehen bleibt, wenn ich Eclipse mit aptitude / apt-get deinstalliere und neu installiere. Wenn es einen Link zu diesem Thema gibt, wäre es gut, ihn hier bereitzustellen, damit die Leute ihn positiv bewerten können.
android.weasel

Antworten:

661

auf meinem Ubuntu 12.04 32 Bit . Ich bearbeite den Befehl zu:

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

Und unter Ubuntu 12.04 64 Bit versuchen:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
Scott
quelle
4
Ich habe diesen Befehl genau so ausgeführt, wie Sie ihn haben, und er hat funktioniert! Ubuntu 12.04 mit Oracle Java 7
MJ
2
Ich werde diese Methode bevorzugen, da ich Oracle Java 7 für ein Projekt verwenden muss
Rojanu
2
Danke dir. Mein Weg war etwas anders, aber das hat es für mich behoben. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Art
2
Dies ist das zweite Mal, dass ich dies tun musste: vor einigen Monaten einmal auf meinem Arbeitscomputer und gerade jetzt auf meinem Heimcomputer, beide Male nach Monaten der Verwendung von Eclipse ohne ein einziges Problem. Gibt es bestimmte Gründe, warum die SWT-Bibliotheken einfach verschwinden würden?
Jonhopkins
2
Das ist ein echter Lebensretter! Beachten Sie, wer auch immer auf ARM (wie ich, der Eclipse auf Chromebook ausführt) "x86" durch "arm" ersetzen sollte, sonst funktioniert es nicht!
PoweredByRice
54

Gelöst:

Da ich Oracle Java 7 installiert hatte, wurde das Standard-Java in Oracle Java 7 geändert, es musste jedoch das Open JDK sein.

Öffnen Sie zum Reparieren das Terminal und geben Sie ein

sudo update-alternatives --config java

Daraufhin wird eine Liste der verschiedenen Java-Typen angezeigt. Wählen Sie einfach das Open JDK.

TomRichardson
quelle
7
Aber was ist, wenn Sie Oracle Java mit Eclipse und nicht Open JDK verwenden möchten? Wie kann man das tun? Vielen Dank!
Ultrajohn
liegt das daran, dass Oracle Java 7 nicht mehr nach nativen Bibliotheken in den Jars sucht? Ich habe das gleiche Problem unter Windows mit Java 7. Das SWT-Programm funktionierte früher
einwandfrei
Arbeitete für mich für Linux Mint Maya.
rshahriar
1
Wenn Sie FOSS bevorzugen, ist OpenJDK natürlich die Plattform der Wahl, aber (wie bei diesen Höhlenbewohnern üblich) legt Oracle in seiner Version bestimmte Hooks fest, die das Portieren einiger Apps (und der meisten Java-Webstart-Apps) zwischen Java-Plattformen verhindern. Dies vereitelt das Hauptziel von Java, nämlich die Portabilität, weshalb sie sich selbst in den Fuß schießen, indem sie die Lieferantenbindung üben ... Es lebe der Python! Lang lebe!
Venzen
44

Geben Sie einfach den Pfad zu den Bibliotheken an:

echo "-Djava.library.path=/usr/lib/jni/" >> /etc/eclipse.ini
dzlatkov
quelle
2
Scheint, dass dies die sauberste Lösung ist.
mspanc
1
Zustimmen, am saubersten und diese Methode wird den Fehler auf einem Ubuntu-System, das anfällig für Änderungen der Java-Version ist, dauerhaft vermeiden - angesichts der Nebenwirkungen von OpenJDK-Upgrades zur Neukonfiguration von Java-bezogenen Dateispeicherorten
venzen
2
Hat für mich an der Ubuntu 64-Bit Cleanest-Lösung gearbeitet. Ich empfehle jedem, diese Lösung auszuwählen, anstatt die Symlinks zu erstellen
Toughy
Dies ist diejenige, die Sie verwenden sollten, wenn Sie Oracle Java 7 verwenden und JDK nicht öffnen
James Kirkby
Die am häufigsten gewählte Antwort funktioniert, aber nicht, wenn Sie "sudo eclipse". Diese Antwort ist überlegen, es funktioniert in allen Fällen!
PoweredByRice
14

In meinem Fall fehlte mir das /usr/lib/jniVerzeichnis vollständig. Behoben von

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

Danach muss kein Symlink mehr erstellt werden. Eclipse wurde normal gestartet.

Trenton
quelle
2
Nach der Installation von jni. Ich habe Dateien mit diesem Befehl für 32 Bit kopiert: ln -s / usr / lib / jni / libswt- * ~ / .swt / lib / linux / x86 /
padman
1
In meinem Fall brauchte ich sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks
4
Bibliothek kann nicht geladen werden: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Bibliothek kann nicht geladen werden: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

Es sieht so aus, als ob sich die Bibliotheken unter .swt / lib / linux / x86_64 / befinden sollten. Wenn diese nicht vorhanden sind, können Sie diesen Befehl versuchen:

Suchen Sie libswt-gtk.so

Dadurch sollten die Bibliotheken das gesamte Verzeichnis nach /home/tom/.swt/lib/linux/x86_64 kopieren

Sherif
quelle
Ich bin mit ähnlichen Fehlern in Linux 64-Bit konfrontiert. Können
Helping Hand ..
3

Ich stimme Scott zu, was er aufgelistet hat, hat funktioniert. Es funktionierte jedoch nicht, es nur aus einem beliebigen Verzeichnis auszuführen. Ich musste in die Dateien / home / * /.swt/lib/linux/x86_64/ 0 cd

Verzeichnis zuerst und führen Sie dann den Link-Befehl aus:

Für 32 Bit:

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

Und unter Ubuntu 12.04 64 Bit:

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

Auf redhat7:

yum install gtk2 libXtst xorg-x11-fonts-Type1

hat den Job gemacht, wegen einer SWT-Abhängigkeit.

hier gefunden

user1767316
quelle
2

Wenn Sie Eclipse mit Oracle Java starten, kann Eclipse möglicherweise keine nativen Bibliotheken wie SWT- oder SVN-Bibliotheken finden. Die SWT-JNI-Bibliotheken befinden sich in / usr / lib / jni / und die SVN-JNI-Bibliotheken in / usr / lib / x86_64-linux-gnu / jni /.

Anstatt Eclipse mit dem Befehl zu starten

eclipse

Sie können den Befehl verwenden

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

um die Umgebungsvariable LD_LIBRARY_PATH an Eclipse zu übergeben. Eclipse findet die nativen Bibliotheken und wird ordnungsgemäß ausgeführt.

user1460856
quelle
Dies gibt mir diesen Fehler 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 Wie kann ich ihn lösen?
Yonela Nuba
1

Ich bin auf diesen Fehler gestoßen, als ich versucht habe, den 32-Bit-Build von Eclipse unter 64-Bit-Linux zu starten. Das Problem wurde nach der Installation des ia32-libs-Pakets behoben.

lancha90
quelle
0

Stellen Sie sicher, dass Ihre Home-Partition mit ausführbaren Berechtigungen bereitgestellt ist. Dies ist die Standardeinstellung. Wenn Sie sie jedoch ohne die Option exec bereitstellen, wird dieser Fehler angezeigt.

Martin B.
quelle
0

Eine möglicherweise allgemeinere Methode ist:

  • Installieren Sie die nicht kopflose Version von openjdk.
  • Eclipse installieren, ausführen und schließen.
  • deinstallieren Sie das openjdk
  • Installieren Sie das JDK von Oracle
user1767316
quelle
0

Für Windows Subsystem für Linux (WSL) benötigen Sie

apt install libswt-gtk-4-jni

Wenn Sie kein OpenJDK 8 haben, benötigen Sie auch

apt install openjdk-8-jdk
ATorras
quelle