运行 HEC-HMS.sh 时 xawt 上出现 UnsatisfiedLinkError

运行 HEC-HMS.sh 时 xawt 上出现 UnsatisfiedLinkError

我最近才开始使用 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

您缺少该程序所需的库。

/home/smythe/HEC/hec-hms35/java/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory

您需要安装libXtst.so.6搜索对于包含此文件的软件包libxtst6

Could not initialize class sun.print.CUPSPrinter

我认为那是 JDK 的一部分,但它似乎需要 awt,而 awt 无法在上面初始化,因此一旦您修复了第一个错误,您就应该设置好了。

答案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

这表明有以下两种情况正在发生:

  1. 有问题的库文件丢失,因此无法使用。
  2. 有问题的库文件存在,但没有正确的权限,这意味着 Java 实际上无法“看到”这些文件。

解决方案取决于具体情况:

  1. (a)如果确实缺少库文件,则需要将库文件放入该目录中。

    (b) 安装libxtst6软件包以获取系统上的库。 如果出于某种原因您需要在源代码中包含库,则需要单独下载并包含它们。
  2. 如果库文件存在但不可读,那么您需要向我们提供这些文件所有权的详细信息(粘贴输出ls -l /home/smythe/HEC/hec-hms35/java/lib/i386/xawt/不会有害,因此我们可以看到它的所有权以及读/写/执行权限。)

相关内容