Eclipse ne peut pas charger les bibliothèques SWT

295

Chaque fois que j'essaie d'ouvrir Eclipse dans Ubuntu 12.04, j'obtiens une erreur de lien insatisfait et il ne s'ouvre pas. J'ai récemment installé le Java JDK et le SDK Android, cela pourrait-il être le problème? J'ai suivi ce tutoriel .

Voici les informations du journal:

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

J'ai essayé de désinstaller et de réinstaller et de supprimer le ~/.eclipserépertoire, mais cela ne fonctionne toujours pas

TomRichardson
la source
Je dois dire que le chemin de votre bibliothèque semble étrange. Ces fichiers .so ne devraient-ils pas se trouver quelque part dans le dossier eclipse / plugins, dans un bocal éclaté? Avez-vous même un tel répertoire (~ / .swt / lib / ...)?
Marko Topolnik
Avez-vous installé libswt-java-gtk3?
Federico Vera du
Bien qu'il soit répondu ci-dessous, il semble que cela reste un bogue dans le système d'installation d'Ubuntu qui devrait être soulevé, car il persiste même si je désinstalle et réinstalle eclipse en utilisant aptitude / apt-get. S'il y a un lien vers ce problème, il serait bon de le fournir ici afin que les gens puissent le voter.
android.weasel

Réponses:

661

sur mon Ubuntu 12.04 32 bits . J'édite la commande pour:

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

Et sur Ubuntu 12.04 64 bits, essayez:

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
Scott
la source
4
J'ai exécuté cette commande exactement comme vous l'avez et cela a fonctionné! Ubuntu 12.04 avec Oracle Java 7
MJ
2
Je préférerai cette méthode car je dois utiliser Oracle Java 7 pour un projet
rojanu
2
Je vous remercie. Mon chemin était légèrement différent, mais cela l'a fixé pour moi. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Art
2
C'est la deuxième fois que je dois faire cela: une fois sur mon ordinateur de travail il y a quelques mois, et tout à l'heure sur mon ordinateur personnel, les deux fois après des mois d'utilisation d'Eclipse sans un seul problème. Y a-t-il des raisons particulières pour lesquelles les bibliothèques swt disparaîtraient tout simplement?
jonhopkins
2
C'est un véritable épargnant de vie! Notez que quiconque sur ARM (comme moi exécutant Eclipse sur Chromebook) devrait remplacer "x86" par "arm" sinon cela ne fonctionnera pas!
PoweredByRice
54

RESOLU:

Parce que j'avais installé Oracle Java 7, il avait changé le Java par défaut en Oracle Java 7, mais il devait être l'Open JDK.

Pour réparer, ouvrez le terminal et tapez

sudo update-alternatives --config java

Cela fait apparaître une liste des différents types de Java. Sélectionnez simplement l'Open JDK.

TomRichardson
la source
7
mais que se passe-t-il si vous souhaitez utiliser Oracle Java avec éclipse, et non Open JDK, comment pourrait-on faire cela? Merci!
ultrajohn
est-ce parce qu'Oracle Java 7 ne cherche plus de bibliothèque native dans les Jars? J'ai également le même problème sur Windows avec Java 7. le programme swt fonctionnait très bien
Wudong
A travaillé pour moi pour Linux Mint Maya.
rshahriar
1
Bien sûr, si vous préférez les logiciels libres, OpenJDK est la plate-forme de choix, mais (comme d'habitude avec ces troglodytes d'entreprise) Oracle impose certains crochets dans leur version qui empêche le portage de certaines applications (et la plupart des applications de démarrage Web java) entre les plates-formes java. Cela va à l'encontre de l'objectif principal de Java, à savoir la portabilité, c'est pourquoi ils se tirent dans le pied en pratiquant le verrouillage des fournisseurs ... Vive le Python! Longue vie!
venzen
44

Spécifiez simplement le chemin d'accès aux bibliothèques:

echo "-Djava.library.path=/usr/lib/jni/" >> /etc/eclipse.ini
dzlatkov
la source
2
Semble que c'est la solution la plus propre.
mspanc
1
D'accord, plus propre et cette méthode évitera définitivement l'erreur sur un système Ubuntu sujet aux changements de version Java - étant donné l'effet secondaire des mises à niveau d'OpenJDK pour reconfigurer les emplacements de fichiers liés à java
venzen
2
A travaillé pour moi sur la solution Ubuntu 64 bits la plus propre en effet, je recommande à quiconque de choisir cette solution au lieu de créer les liens symboliques
Toughy
c'est celui à utiliser si vous utilisez oracle java 7 et pas ouvert JDK
James Kirkby
La réponse la plus votée fonctionne, mais pas lorsque vous "éclipse sudo". Cette réponse est supérieure, elle fonctionne dans tous les cas!
PoweredByRice
14

Dans mon cas, le /usr/lib/jnirépertoire me manquait complètement. Fixé par

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

Pas besoin de créer un lien symbolique par la suite. Eclipse a démarré normalement.

Trenton
la source
2
Après avoir installé jni. J'ai copié des fichiers en utilisant cette commande pour 32 bits: ln -s / usr / lib / jni / libswt- * ~ / .swt / lib / linux / x86 /
padman
1
Dans mon cas, j'avais besoin de sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks
4
Impossible de charger la bibliothèque: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Impossible de charger la bibliothèque: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

il semble que les bibliothèques devraient être dans .swt / lib / linux / x86_64 / s'il n'y en a pas, vous pouvez essayer cette commande:

recherchez libswt-gtk.so

cela devrait trouver que les bibliothèques copient le répertoire entier dans /home/tom/.swt/lib/linux/x86_64

chérif
la source
je fais face à une erreur similaire sous linux 64 bits, pouvez-vous vérifier cette question, stackoverflow.com/questions/21980558/…
Helping Hand ..
3

Je suis d'accord avec Scott, ce qu'il a énuméré a fonctionné. Cependant, l'exécuter à partir de n'importe quel répertoire n'a pas fonctionné. J'ai du cd sur les fichiers / home / * /.swt/lib/linux/x86_64/ 0

répertoire d'abord, puis exécutez la commande de lien:

Pour 32 bits:

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

Et sur Ubuntu 12.04 64 bits:

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

Sur redhat7:

yum install gtk2 libXtst xorg-x11-fonts-Type1

a fait le travail, en raison d'une dépendance swt.

trouvé ici

user1767316
la source
2

Si vous démarrez eclipse à l'aide d'Oracle Java, alors eclipse peut échouer dans la recherche de bibliothèques natives comme les bibliothèques SWT ou SVN. Les bibliothèques SWT-JNI sont situées dans / usr / lib / jni / et les bibliothèques SVN-JNI sont situées dans / usr / lib / x86_64-linux-gnu / jni /.

Au lieu de démarrer eclipse avec la commande

eclipse

vous pouvez utiliser la commande

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

pour passer la variable d'environnement LD_LIBRARY_PATH à éclipse. Eclipse trouvera les bibliothèques natives et fonctionnera correctement.

user1460856
la source
Cela me donne cette erreur 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 Comment puis-je le résoudre?
Yonela Nuba
1

Je suis tombé sur cette erreur lorsque j'ai essayé de démarrer la génération 32 bits d'Eclipse sous Linux 64 bits. Le problème a été résolu après l'installation du package ia32-libs.

lancha90
la source
0

Veuillez vous assurer que votre partition domestique est montée avec des autorisations exécutables. C'est la valeur par défaut, mais si vous le montez sans l'option exec, vous obtiendrez cette erreur.

Martin B.
la source
0

Une méthode peut-être plus générique consiste à:

  • installer la version sans tête de l'openjdk,
  • installer, exécuter et fermer eclipse.
  • désinstaller l'openjdk
  • installer le JDK d'Oracle
user1767316
la source
0

Pour le sous-système Windows pour Linux (WSL), vous aurez besoin

apt install libswt-gtk-4-jni

Si vous n'avez pas d'OpenJDK 8, vous aurez également besoin

apt install openjdk-8-jdk
ATorras
la source