Eclipse không thể tải các thư viện SWT


295

Mỗi lần tôi thử mở Eclipse trong Ubuntu 12.04, tôi gặp một Lỗi liên kết không thỏa mãn và nó sẽ không mở. Gần đây tôi đã cài đặt java JDK và Android SDK, đây có thể là vấn đề không? Tôi đã làm theo hướng dẫn này .

Đây là thông tin nhật ký:

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

Tôi đã thử gỡ cài đặt và cài đặt lại, và xóa ~/.eclipsethư mục nhưng nó vẫn không hoạt động


Tôi phải nói rằng đường dẫn thư viện của bạn trông kỳ lạ. Không phải các tệp .so đó sẽ ở đâu đó trong thư mục nhật thực / plugin, trong một lọ đã nổ? Bạn thậm chí có một thư mục như vậy (~ / .swt / lib / ...)?
Marko Topolnik

Bạn đã cài đặt libswt-java-gtk3 chưa?
Federico Vera

Mặc dù điều này được trả lời bên dưới, nhưng có vẻ như đây vẫn là một lỗi trong hệ thống cài đặt của Ubuntu, vì nó vẫn tồn tại ngay cả khi tôi gỡ cài đặt và cài đặt lại nhật thực bằng cách sử dụng aptitude / apt-get. Nếu có một liên kết đến vấn đề đó, sẽ tốt hơn nếu cung cấp nó ở đây để mọi người có thể nâng cao nó.
android.weasel

Câu trả lời:


661

trên Ubuntu 12.04 32 bit của tôi . Tôi chỉnh sửa lệnh thành:

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

Và trên Ubuntu 12.04 64 bit hãy thử:

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

4
Tôi đã thực hiện lệnh đó chính xác như bạn có nó và nó đã làm việc! Ubuntu 12.04 với Oracle Java 7
MJ

2
Tôi sẽ thích phương pháp này vì tôi phải sử dụng Oracle Java 7 cho một dự án
rojanu

2
Cảm ơn bạn. Con đường của tôi hơi khác một chút nhưng điều này đã cố định nó cho tôi. ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/
Nghệ thuật

2
Đây là lần thứ hai tôi phải làm điều này: một lần trên máy tính làm việc của tôi vài tháng trước và bây giờ trên máy tính ở nhà của tôi, cả hai lần sau nhiều tháng sử dụng Eclipse mà không gặp một vấn đề nào. Có bất kỳ lý do cụ thể tại sao các thư viện swt sẽ biến mất?
jonhopkins

2
Đây là tiết kiệm cuộc sống thực! Lưu ý bất cứ ai trên ARM (như tôi chạy Eclipse trên Chromebook) nên thay thế "x86" bằng "arm" nếu không nó sẽ không hoạt động!
PoweredByRice

54

GIẢI QUYẾT:

Vì tôi đã cài đặt Oracle Java 7 nên nó đã thay đổi Java mặc định thành Oracle Java 7, tuy nhiên, nó cần phải là JDK mở.

Để khắc phục, hãy mở terminal và gõ

sudo update-alternatives --config java

Điều này đưa ra một danh sách các loại Java khác nhau. Đơn giản chỉ cần chọn JDK mở.


7
nhưng nếu bạn muốn sử dụng Oracle Java với nhật thực và không mở JDK thì làm sao người ta có thể làm điều đó? cảm ơn!
ultrajohn

Có phải vì Oracle Java 7 không tìm kiếm thư viện riêng trong Jars nữa không? Tôi cũng gặp vấn đề tương tự trên windows với Java 7. chương trình swt đã từng hoạt động tốt
Wudong

Làm việc cho tôi cho linux mint maya.
rshahriar

1
Tất nhiên, nếu bạn thích FOSS, OpenJDK là nền tảng được lựa chọn, nhưng (như thường lệ với các troglodytes công ty này), Oracle áp đặt một số hook nhất định trong phiên bản của họ để ngăn chặn việc chuyển một số ứng dụng (và hầu hết các ứng dụng webstart java) giữa các nền tảng java. Điều này đánh bại mục tiêu chính của Java, cụ thể là tính di động, đó là lý do tại sao họ tự bắn vào chân mình bằng cách thực hành khóa nhà cung cấp ... Long Live the Python! Sống lâu!
venzen

44

Chỉ cần chỉ định đường dẫn đến thư viện:

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

2
Có vẻ như đây là giải pháp sạch nhất.
mspanc

1
Đồng ý, rõ ràng nhất và phương pháp này sẽ vĩnh viễn tránh được lỗi trên hệ thống Ubuntu dễ bị thay đổi phiên bản Java - do tác dụng phụ của các nâng cấp OpenJDK để cấu hình lại các vị trí tệp liên quan đến java
venzen

2
Thực sự đã làm việc với tôi trên Ubuntu 64-bit Giải pháp sạch nhất, tôi khuyên mọi người nên chọn giải pháp này thay vì tạo các liên kết tượng trưng
Toughy

đây là cái để sử dụng nếu bạn sử dụng oracle java 7 và không mở JDK
James Kirkby

Câu trả lời được bình chọn nhiều nhất có tác dụng, nhưng không phải khi bạn "nhật thực sudo". Câu trả lời này là vượt trội, nó hoạt động trong mọi trường hợp!
PoweredByRice

14

Trong trường hợp của tôi, tôi đã thiếu /usr/lib/jnithư mục hoàn toàn. Được sửa chữa bởi

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

Không cần symlink sau đó. Nhật thực bắt đầu bình thường.


2
Sau khi cài đặt jni. Tôi đã sao chép các tệp bằng lệnh này trong 32 bit: ln -s / usr / lib / jni / libswt- * ~ / .swt / lib / linux / x86 /
padman

1
Trong trường hợp của tôi, tôi cần sudo apt-get install libswt-gtk-4-jni libswt-gtk-4-java
aleixrocks

4
Không thể tải thư viện: /home/tom/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Không thể tải thư viện: /home/tom/.swt/lib/linux/x86_64/libswt-gtk.so

có vẻ như các thư viện nên ở .swt / lib / linux / x86_64 / nếu không có ở đó bạn có thể thử lệnh này:

định vị libswt-gtk.so

điều này sẽ tìm các thư viện sao chép toàn bộ thư mục vào /home/tom/.swt/lib/linux/x86_64


Tôi đang gặp phải lỗi tương tự trong linux 64 bit, bạn có thể kiểm tra câu hỏi này không, stackoverflow.com/questions/21980558/ Lời
Giúp đỡ ..

3

Tôi đồng ý với Scott, những gì anh ấy liệt kê đã làm việc. Tuy nhiên, chỉ chạy nó từ bất kỳ thư mục không hoạt động. Tôi đã phải cd vào các tập tin / home / * /.swt/lib/linux/x86_64/ 0

thư mục đầu tiên và sau đó chạy lệnh liên kết:

Trong 32 bit:

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

Và trên Ubuntu 12.04 64 bit:

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


2

Nếu bạn bắt đầu nhật thực bằng cách sử dụng java, thì nhật thực có thể thất bại trong việc tìm các thư viện nguyên gốc như thư viện SWT hoặc SVN. Các thư viện SWT-JNI được đặt trong / usr / lib / jni / và các thư viện SVN-JNI được đặt trong / usr / lib / x86_64-linux-gnu / jni /.

Thay vì bắt đầu nhật thực bằng lệnh

eclipse

bạn có thể sử dụng lệnh

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

để chuyển biến môi trường LD_LIBRARY_PATH sang nhật thực. Eclipse sẽ tìm thấy các thư viện riêng và sẽ chạy đúng.


Điều này cho tôi lỗi này 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 Làm thế nào tôi có thể giải quyết nó?
Yonela Nuba

1

Tôi đã gặp phải lỗi này khi cố gắng bắt đầu xây dựng Eclipse 32 bit trong linux 64 bit. Vấn đề đã được giải quyết sau khi cài đặt gói ia32-libs.


0

Vui lòng đảm bảo rằng phân vùng nhà của bạn được gắn với các quyền thực thi. Đó là mặc định, nhưng nếu bạn tình cờ gắn nó mà không có tùy chọn exec, bạn sẽ gặp lỗi này.


0

Một phương pháp có thể chung hơn là:

  • cài đặt phiên bản không đầu của openjdk,
  • cài đặt, chạy và đóng nhật thực.
  • gỡ cài đặt openjdk
  • cài đặt JDK của oracle


0

Đối với Hệ thống con Windows cho Linux (WSL), bạn sẽ cần

apt install libswt-gtk-4-jni

Nếu bạn không có OpenJDK 8, bạn cũng sẽ cần

apt install openjdk-8-jdk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.