![运行 HEC-HMS.sh 时 xawt 上出现 UnsatisfiedLinkError](https://linux22.com/image/835732/%E8%BF%90%E8%A1%8C%20HEC-HMS.sh%20%E6%97%B6%20xawt%20%E4%B8%8A%E5%87%BA%E7%8E%B0%20UnsatisfiedLinkError.png)
我最近才开始使用 Linux,这个问题让我很为难。我使用羟丙基甲基纤维素和羟丙基甲基纤维素定期用于工作。我一直在 Wine 中使用 Windows 版本,但它们确实存在错误。所以我决定尝试 Linux 版本。下面的链接将带您到这两个程序的下载页面。它们是用于水文学和数据管理的免费程序。
一旦我安装它们并尝试运行 shell 文件(HEC-HMS.sh
例如),我就会收到大量我无法理解的 java 错误。如果我不得不猜测,我会说找不到有问题的 java 文件。当我检查 java 是否已安装时,它确实已安装。
以下是尝试运行的终端的输出HEC-HMS.sh
:
Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: /home/smythe/HEC/hec-hms35/java/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at sun.security.action.LoadLibraryAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.NativeLibLoader.loadLibraries(Unknown Source)
at sun.awt.DebugHelper.<clinit>(Unknown Source)
at java.awt.Component.<clinit>(Unknown Source)
at javax.swing.ImageIcon.<clinit>(Unknown Source)
at hms.i.c(Unknown Source)
at hms.i.b(Unknown Source)
at hms.K.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-4" java.lang.UnsatisfiedLinkError: /home/smythe/HEC/hec-hms35/java/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at sun.security.action.LoadLibraryAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.loadLibraries(Unknown Source)
at java.awt.Toolkit.<clinit>(Unknown Source)
at sun.print.CUPSPrinter.<clinit>(Unknown Source)
at sun.print.UnixPrintServiceLookup.getDefaultPrintService(Unknown Source)
at sun.print.UnixPrintServiceLookup.refreshServices(Unknown Source)
at sun.print.UnixPrintServiceLookup$PrinterChangeListener.run(Unknown Source)
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
at java.awt.Color.<clinit>(Unknown Source)
at hms.model.l.<init>(Unknown Source)
at hms.model.ProjectManager.<init>(Unknown Source)
at hms.Hms.<init>(Unknown Source)
at hms.Hms.main(Unknown Source)
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: Could not initialize class sun.print.CUPSPrinter
at sun.print.UnixPrintServiceLookup.getDefaultPrintService(Unknown Source)
at javax.print.PrintServiceLookup.lookupDefaultPrintService(Unknown Source)
at hms.util.f.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
当我尝试运行时,我得到了类似的输出HEC-DSSVue.sh
。如果有人能提供一些解决方案,我将不胜感激。
问题原来是该程序需要特定依赖项的 32 位版本。
答案1
答案2
我看了错误信息。
我很确定你缺少库,或者无法读取它们,因为出现了这个消息两次在跟踪中:/home/smythe/HEC/hec-hms35/java/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
这表明有以下两种情况正在发生:
- 有问题的库文件丢失,因此无法使用。
- 有问题的库文件存在,但没有正确的权限,这意味着 Java 实际上无法“看到”这些文件。
解决方案取决于具体情况:
- (a)如果确实缺少库文件,则需要将库文件放入该目录中。
(b) 安装libxtst6
软件包以获取系统上的库。 如果出于某种原因您需要在源代码中包含库,则需要单独下载并包含它们。 - 如果库文件存在但不可读,那么您需要向我们提供这些文件所有权的详细信息(粘贴输出
ls -l /home/smythe/HEC/hec-hms35/java/lib/i386/xawt/
不会有害,因此我们可以看到它的所有权以及读/写/执行权限。)