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

libswt-java-gtk3을 설치 했습니까?
Federico Vera

이것은 아래 답변이지만, 그것은 aptitude / apt-get을 사용하여 일식을 제거하고 다시 설치하더라도 지속되기 때문에 우분투 설치 시스템의 버그로 남아 있습니다. 이 문제와 관련된 링크가 있다면 사람들이이 문제를 공감할 수 있도록 여기에 제공하는 것이 좋습니다.
android.weasel

답변:


661

내 우분투 12.04 32 비트에서 . 명령을 편집하여 다음을 수행합니다.

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

그리고 우분투 12.04 64 비트 시도 :

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

4
나는 그 명령을 당신이 가진 그대로 실행했고 작동했습니다! Oracle Java 7을 사용하는 Ubuntu 12.04
MJ

2
프로젝트에 Oracle Java 7을 사용해야
하므로이

2
감사합니다. 나의 길은 약간 달랐지만 이것은 나를 위해 고쳤다. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Art

2
몇 달 전 직장 컴퓨터에서 한 번, 집 컴퓨터에서 한 번만해도 문제없이 Eclipse를 사용한 후 두 달이 지났습니다. swt 라이브러리가 사라지는 특별한 이유가 있습니까?
jonhopkins

2
이것은 실제 생명의 은인입니다! Chromebook에서 Eclipse를 실행하는 것처럼 ARM 사용자는 "x86"을 "arm"으로 바꿔야합니다. 그렇지 않으면 작동하지 않습니다!
PoweredByRice

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

이것은 Java Java 7이 Jars에서 기본 라이브러리를 더 이상 찾지 않기 때문입니까? Java 7을 사용하는 Windows에서도 동일한 문제가 있습니다. swt 프로그램은 잘 작동했습니다
Wudong

리눅스 민트 마야에서 나를 위해 일했습니다.
rshahriar

1
물론 FOSS를 선호하는 경우 OpenJDK가 선택되는 플랫폼이지만, (일반적으로 이러한 기업 혈당과 마찬가지로) Oracle은 Java 플랫폼간에 일부 앱 (및 대부분의 Java 웹 스타트 앱)의 이식을 방지하는 특정 후크를 버전에 적용합니다. 이것은 자바의 주요 목표, 즉 이식성 (portability)을 무너 뜨린다. 벤더 락인 연습을 통해 발을 딛고있는 이유는 ... Long Live the Python! 오랫동안 살다!
venzen

44

라이브러리 경로를 지정하십시오.

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

2
이것이 가장 깨끗한 솔루션 인 것 같습니다.
mspanc

1
동의, 깨끗한,이 방법은 영구적으로 자바 버전 변경하는 경향이있다 우분투 시스템의 오류 방지합니다 - 재구성 자바 관련 파일 위치에 오픈 JDK 업그레이드의 부작용 주어진
venzen

2
실제로 Ubuntu 64 비트 가장 깨끗한 솔루션에서 저를 위해
일한

이것은 오라클 Java 7을 사용하고 JDK를 열지 않는 경우에 사용하는 것입니다.
James Kirkby

가장 투표 된 답변은 효과가 있지만 "스도 일식"에는 적용되지 않습니다. 이 답변은 우수하며 모든 경우에 효과적입니다!
PoweredByRice

14

내 경우에는 /usr/lib/jni디렉토리가 완전히 누락되었습니다 . 에 의해 고정

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

나중에 symlink 할 필요가 없습니다. 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에 복사한다는 것을 알 수 있습니다.


리눅스 64 비트에서 비슷한 오류가 발생했습니다.이 질문을 확인할 수 있습니까, stackoverflow.com/questions/21980558/…
Helping Hand ..

3

나는 그가 열거 한 것을 Scott에게 동의했다. 그러나 디렉토리에서 실행하면 작동하지 않았습니다. 나는 / home / * /.swt/lib/linux/x86_64/ 0 파일 로 cd해야했다

먼저 디렉토리를 지정한 다음 link 명령을 실행하십시오.

32 비트의 경우 :

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

그리고 우분투 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를 사용하여 이클립스를 시작하면 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는 기본 라이브러리를 찾고 올바르게 실행됩니다.


이 오류가 발생하면 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의 헤드리스 버전을 설치하십시오.
  • 일식 설치, 실행 및 종료.
  • openjdk를 제거하십시오
  • 오라클의 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.