EclipseがSWTライブラリをロードできない


295

Ubuntu 12.04でEclipseを開こうとするたびに、Unsatisfied Link Errorが発生し、開かなくなります。最近、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ファイルは、展開されたjar内のeclipse / pluginsフォルダー内のどこかにあるべきではありませんか?そのようなディレクトリ(〜/ .swt / lib / ...)さえありますか?
Marko Topolnik 2012

libswt-java-gtk3をインストールしましたか?
フェデリコヴェラ

これは以下で回答されますが、aptitude / apt-getを使用してEclipseをアンインストールして再インストールしても引き続き発生するため、発生させる必要があるUbuntuのインストールシステムのバグのままです。その問題へのリンクがある場合、人々がそれを賛成できるようにここにそれを提供することは良いことです。
android.weasel 2013年

回答:


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
私はあなたが持っているとおりにそのコマンドを実行しました、そしてそれはうまくいきました!Ubuntu 12.04とOracle Java 7
MJ

2
プロジェクトにOracle Java 7を使用する必要があるため、この方法を選択します
rojanu

2
ありがとうございました。私のパスは少し異なりましたが、これで修正されました。 ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
アート

2
これは私がこれを実行しなければならなかった2回目です。数か月前に仕事用のコンピューターで、そして今は自宅のコンピューターで、どちらも問題なくEclipseを使用して数か月後です。swtライブラリが消える理由は何ですか?
jonhopkins 2013年

2
これは現実の救済者です!ARMを使用している人(ChromebookでEclipseを実行している私など)は、「x86」を「arm」に置き換えてください。そうしないと機能しません。
PoweredByRice 14

54

解決済み:

Oracle Java 7をインストールしたため、デフォルトのJavaがOracle Java 7に変更されましたが、Open JDKである必要がありました。

修正するには、ターミナルを開いて次のように入力します

sudo update-alternatives --config java

これにより、さまざまなタイプのJavaのリストが表示されます。Open JDKを選択するだけです。


7
しかし、Open JDKではなく、EclipseでOracle Javaを使用したい場合はどうすればよいでしょうか。ありがとう!
ultrajohn

これは、Oracle Java 7がjar内のネイティブライブラリを検索しないためですか?Java 7のウィンドウでも同じ問題があります。うまく仕事にするために使用SWTプログラム
Wudong

Linuxミントマヤのために私のために働いた。
rshahriar 2013

1
もちろん、FOSSを使用する場合は、OpenJDKがプラットフォームとして選択されますが、(これらの企業の隠蔽で通常行われているように)Oracleは、Javaプラットフォーム間で一部のアプリ(およびほとんどのJava Webstartアプリ)の移植を妨げる特定のフックをバージョンに課しています。これはJavaの主な目的、つまり移植性を打ち負かします。そのため、ベンダーロックインを実践することにより、彼らは足を踏み入れています... Pythonを長生きさせてください!ロングライブ!
venzen

44

ライブラリへのパスを指定するだけです。

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

2
これが最もクリーンなソリューションのようです。
mspanc 2013

1
同意し、最もクリーンで、この方法は、Java関連のファイルの場所を再構成するためのOpenJDKアップグレードの副作用があるため、Javaバージョンの変更が発生しやすいUbuntuシステムでのエラーを永続的に回避します
venzen

2
Ubuntu 64ビットCleanestソリューションで実際に
働いたので

これは、oracle Java 7を使用していて、JDKを開いていない場合に使用するものです
James Kirkby 14

最も投票された回答は機能しますが、「sudo eclipse」の場合は機能しません。この答えは優れており、すべてのケースで機能します!
PoweredByRice 14

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

私がスコットに同意する、彼がリストしたものが働いた。ただし、任意のディレクトリから実行するだけでは機能しませんでした。/ home / * /.swt/lib/linux/x86_64/ 0ファイルにcdする必要がありました

まずディレクトリを作成し、次にリンクコマンドを実行します。

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/


2

Oracle Javaを使用してEclipseを開始すると、EclipseはSWTまたはSVNライブラリなどのネイティブライブラリの検索に失敗する場合があります。SWT-JNIライブラリは/ usr / lib / jni /にあり、SVN-JNIライブラリは/ usr / lib / x86_64-linux-gnu / jni /にあります。

コマンドで日食を開始する代わりに

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

Linux用のWindowsサブシステム(WSL)には、次のものが必要です。

apt install libswt-gtk-4-jni

OpenJDK 8がない場合は、以下も必要です。

apt install openjdk-8-jdk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.