Eclipse无法加载SWT库


295

每次我尝试在Ubuntu 12.04中打开Eclipse时,都会收到“不满意的链接错误”,并且该错误不会打开。我最近安装了Java JDK和Android SDK,这可能是问题吗?我遵循了本教程

这是日志信息:

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

我尝试卸载并重新安装,然后删除~/.eclipse目录,但仍然无法正常工作


我必须说您的库路径看起来很奇怪。这些.so文件是否不应该放在爆炸罐中的eclipse / plugins文件夹中?您甚至有这样的目录(〜/ .swt / lib / ...)?
Marko Topolnik '04年5

您安装了libswt-java-gtk3吗?
Federico Vera'4

尽管下面对此进行了回答,但看来这仍然是应该引起的Ubuntu安装系统中的错误,因为即使我使用aptitude / apt-get卸载并重新安装eclipse,它仍然存在。如果存在与该问题的链接,那么在此处提供该链接将是不错的选择,以便人们可以对其进行投票。
android.weasel 2013年

Answers:


661

在我的Ubuntu 12.04 32位上。我将命令编辑为:

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

在Ubuntu 12.04 64位上,尝试:

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

4
我完全按照您的命令执行了该命令,并且它起作用了!具有Oracle Java 7的Ubuntu 12.04
MJ 2012年

2
我更喜欢这种方法,因为我必须为项目使用Oracle Java 7
rojanu'4

2
谢谢。我的道路略有不同,但这对我来说是固定的。 ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
艺术

2
这是我第二次必须这样做:几个月前在工作计算机上一次,而现在在我的家用计算机上,两次都是在使用Eclipse几个月后又没有出现任何问题。swt库为何会消失,是否有任何特殊原因?
jonhopkins 2013年

2
这是真实的救星!请注意,任何使用ARM的人(例如在Chromebook上运行Eclipse的我)都应将“ x86”替换为“ arm”,否则将无法工作!
PoweredByRice 2014年

54

解决了:

因为我已经安装了Oracle Java 7,所以已将默认Java更改为Oracle Java 7,但是它必须是Open JDK。

要修复,请打开终端并输入

sudo update-alternatives --config java

这将列出不同类型的Java。只需选择Open JDK。


7
但是,如果您想将Oracle Java与eclipse一起使用,而不是Open JDK,该怎么办?谢谢!
ultrajohn 2012年

这是因为Oracle Java 7不再在Jars中寻找本机库了吗?我在使用Java 7的Windows上也遇到同样的问题。swt程序曾经可以正常工作
Wudong

为我工作的Linux Mint Maya。
rshahriar

1
当然,如果您更喜欢FOSS,则可以选择OpenJDK平台,但是(与这些公司惯常做法一样)Oracle在其版本中强加了某些挂钩,以防止某些应用程序(和大多数Java Webstart应用程序)在Java平台之间移植。这违反了Java的主要目标(即可移植性),这就是为什么他们通过练习供应商锁定来步履蹒跚……Python万岁!长命!
威尼斯

44

只需指定库的路径:

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

2
似乎这是最干净的解决方案。
mspanc

1
同意,最干净,此方法将永久避免易于Java版本更改的Ubuntu系统上的错误-鉴于OpenJDK升级的副作用,以重新配置与Java相关的文件位置
venzen

2
实际上,我在Ubuntu 64位最干净的解决方案上为我工作,我建议任何人选择此解决方案而不是创建符号链接
Toughy

如果您使用的是Oracle Java 7并且未打开JDK,则这是要使用的一种
James Kirkby 2014年

投票最多的答案有效,但不适用于“ sudo eclipse”。这个答案是优越的,它适用于所有情况!
PoweredByRice 2014年

14

就我而言,我/usr/lib/jni完全没有该目录。固定于

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

之后无需符号链接。Eclipse正常启动。


2
安装jni后。我使用此命令复制了32位文件:ln -s / usr / lib / jni / libswt- *〜/ .swt / lib / linux / x86 /
padman

1
就我而言,我需要sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks

4
无法加载库:/home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
无法加载库:/home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

看起来这些库应该位于.swt / lib / linux / x86_64 /,如果没有,您可以尝试以下命令:

找到libswt-gtk.so

这应该找到库将整个目录复制到/home/tom/.swt/lib/linux/x86_64


我在Linux 64位系统中遇到类似的错误,您能检查一下这个问题吗,stackoverflow.com
伸出援助之手。

3

我同意斯科特的观点,他列出的内容行得通。但是,仅从任何目录运行它均无效。我必须CD到/ home / * /.swt/lib/linux/x86_64/ 0文件

目录,然后运行链接命令:

对于32位:

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

在Ubuntu 12.04 64位上:

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

3

在redhat7上:

yum install gtk2 libXtst xorg-x11-fonts-Type1

由于swt依赖性而做了这项工作。

这里找到


2

如果使用oracle java启动eclipse,则eclipse可能无法找到本机库(例如SWT或SVN库)。SWT-JNI库位于/ usr / lib / jni /中,而SVN-JNI库位于/ usr / lib / x86_64-linux-gnu / jni /中。

而不是使用命令启动eclipse

eclipse

你可以使用命令

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

将环境变量LD_LIBRARY_PATH传递给Eclipse。Eclipse将找到本机库并且可以正常运行。


这给了我这个错误我该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 如何解决?
Yonela Nuba

1

尝试在64位linux下启动Eclipse的32位构建时遇到了此错误。安装ia32-libs软件包后,该问题已解决。


0

请确保您的主分区已安装可执行权限。这是默认设置,但是如果碰巧在没有exec选项的情况下挂载它,则会收到此错误。


0

可能更通用的方法是:

  • 安装openjdk的非无头版本,
  • 安装,运行和关闭Eclipse。
  • 卸载openjdk
  • 安装Oracle的JDK


0

对于Windows Linux子系统(WSL),您需要

apt install libswt-gtk-4-jni

如果您没有OpenJDK 8,则还需要

apt install openjdk-8-jdk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.