Eclipse no puede cargar bibliotecas SWT

295

Cada vez que intento abrir Eclipse en Ubuntu 12.04 recibo un error de enlace insatisfecho y no se abrirá. Recientemente instalé Java JDK y Android SDK, ¿podría ser este el problema? Seguí este tutorial .

Aquí está la información de 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)

He intentado desinstalar y reinstalar, y eliminar el ~/.eclipsedirectorio, pero todavía no funciona.

TomRichardson
fuente
Debo decir que el camino de tu biblioteca parece extraño. ¿No deberían esos archivos .so estar en algún lugar dentro de la carpeta eclipse / plugins, dentro de un jar explotado? ¿Tienes incluso un directorio (~ / .swt / lib / ...)?
Marko Topolnik el
¿Instalaste libswt-java-gtk3?
Federico Vera
Aunque esto se responde a continuación, parece que esto sigue siendo un error en el sistema de instalación de Ubuntu que se debe generar, porque persiste incluso si desinstalo y reinstalo eclipse usando aptitude / apt-get. Si hay un enlace a ese problema, sería bueno proporcionarlo aquí para que la gente pueda votarlo.
android.weasel

Respuestas:

661

en mi Ubuntu 12.04 32 bit . Edito el comando para:

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

Y en Ubuntu 12.04, prueba de 64 bits :

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
Scott
fuente
44
¡Ejecuté ese comando exactamente como lo tienes y funcionó! Ubuntu 12.04 con Oracle Java 7
MJ
2
Preferiré este método ya que tengo que usar Oracle Java 7 para un proyecto
rojanu
2
Gracias. Mi camino era ligeramente diferente, pero esto me lo solucionó. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Arte
2
Esta es la segunda vez que tengo que hacer esto: una vez en la computadora de mi trabajo hace unos meses, y justo ahora en la computadora de mi casa, las dos veces después de meses de usar Eclipse sin un solo problema. ¿Hay alguna razón particular por la cual las bibliotecas swt simplemente desaparecerían?
jonhopkins
2
¡Esto es un salvavidas real! Tenga en cuenta que quien esté en ARM (como yo ejecutando Eclipse en Chromebook) debe reemplazar "x86" con "arm", de lo contrario, ¡no funcionará!
PoweredByRice
54

RESUELTO

Como había instalado Oracle Java 7, había cambiado el Java predeterminado a Oracle Java 7, sin embargo, tenía que ser Open JDK.

Para arreglarlo, abre la terminal y escribe

sudo update-alternatives --config java

Esto abre una lista de los diferentes tipos de Java. Simplemente seleccione Abrir JDK.

TomRichardson
fuente
77
pero ¿qué pasa si desea utilizar Oracle Java con eclipse y no Open JDK, cómo podría hacerlo? ¡Gracias!
ultrajohn
¿Es esto porque Oracle Java 7 ya no busca una biblioteca nativa en los tarros? También tengo el mismo problema en Windows con Java 7. el programa swt solía funcionar bien
Wudong
Trabajó para mí para linux mint maya.
rshahriar 01 de
1
Por supuesto, si prefiere FOSS, OpenJDK es la plataforma elegida, pero (como es habitual con estos trogloditas corporativos) Oracle impone ciertos ganchos en su versión que evita la portabilidad de algunas aplicaciones (y la mayoría de las aplicaciones Java WebStart) entre plataformas Java. Esto derrota el objetivo principal de Java, a saber, la portabilidad, razón por la cual se están disparando a sí mismos al practicar el bloqueo de proveedores ... ¡Viva Python! ¡Larga vida!
venzen
44

Simplemente especifique la ruta a las bibliotecas:

echo "-Djava.library.path=/usr/lib/jni/" >> /etc/eclipse.ini
dzlatkov
fuente
2
Parece que esta es la solución más limpia.
mspanc
1
De acuerdo, más limpio y este método evitará permanentemente el error en un sistema Ubuntu que es propenso a cambios en la versión de Java, dado el efecto secundario de las actualizaciones de OpenJDK para reconfigurar ubicaciones de archivos relacionados con Java
venzen
2
De hecho, funcionó para mí en la solución Ubuntu 64 bits más limpia, recomiendo a cualquiera que elija esta solución en lugar de crear los enlaces simbólicos
Toughy
este es el que debe usar si usa Oracle 7 Java y no abre JDK
James Kirkby
La respuesta más votada funciona, pero no para cuando "sudo eclipse". Esta respuesta es superior, ¡funciona en todos los casos!
PoweredByRice
14

En mi caso, me faltaba el /usr/lib/jnidirectorio por completo. Arreglado por

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

No es necesario hacer un enlace simbólico después. Eclipse comenzó normalmente.

Trenton
fuente
2
Después de instalar jni. Copié archivos usando este comando para 32 bits: ln -s / usr / lib / jni / libswt- * ~ / .swt / lib / linux / x86 /
padman
1
En mi caso, necesitaba sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks
4
No se puede cargar la biblioteca: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
No se puede cargar la biblioteca: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

parece que las bibliotecas deberían estar en .swt / lib / linux / x86_64 / si no hay, puede probar este comando:

localizar libswt-gtk.so

esto debería encontrar que las bibliotecas copian todo el directorio a /home/tom/.swt/lib/linux/x86_64

jerife
fuente
Me enfrento a un error similar en Linux de 64 bits, ¿puedes consultar esta pregunta? stackoverflow.com/questions/21980558/…
Helping Hand ..
3

Estoy de acuerdo con Scott, lo que él enumeró funcionó. Sin embargo, simplemente ejecutarlo desde cualquier directorio no funcionó. Tuve que cd a los archivos / home / * /.swt/lib/linux/x86_64/ 0

directorio primero y luego ejecute el comando de enlace:

Para 32 bits:

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

Y en Ubuntu 12.04 64 bit:

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

En redhat7:

yum install gtk2 libXtst xorg-x11-fonts-Type1

hizo el trabajo, debido a una dependencia swt.

encontrado aquí

usuario1767316
fuente
2

Si comienza eclipse usando oracle java, entonces eclipse podría fallar al encontrar bibliotecas nativas como SWT o SVN. Las bibliotecas SWT-JNI se encuentran en / usr / lib / jni / y las bibliotecas SVN-JNI se encuentran en / usr / lib / x86_64-linux-gnu / jni /.

En lugar de comenzar el eclipse con el comando

eclipse

puedes usar el comando

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

para pasar la variable de entorno LD_LIBRARY_PATH a eclipse. Eclipse encontrará las bibliotecas nativas y se ejecutará correctamente.

usuario1460856
fuente
Esto me da este error 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 ¿Cómo puedo resolverlo?
Yonela Nuba
1

Encontré este error cuando intenté iniciar la compilación de Eclipse de 32 bits en Linux de 64 bits. El problema se resolvió después de instalar el paquete ia32-libs.

lancha90
fuente
0

Asegúrese de que su partición doméstica esté montada con permisos ejecutables. Ese es el valor predeterminado, pero si lo monta sin la opción de ejecución, obtendrá este error.

Martin B.
fuente
0

Un método posiblemente más genérico es:

  • instale una versión sin cabeza de openjdk,
  • instalar, ejecutar y cerrar eclipse.
  • desinstalar el openjdk
  • instalar JDK de Oracle
usuario1767316
fuente
0

Para Windows Subsystem for Linux (WSL) necesitará

apt install libswt-gtk-4-jni

Si no tienes un OpenJDK 8, también necesitarás

apt install openjdk-8-jdk
ATorras
fuente