【问题标题】:Unable to load library 'gs': libgs.so: cannot open shared object file: No such file or directory无法加载库“gs”:libgs.so:无法打开共享对象文件:没有这样的文件或目录
【发布时间】:2013-07-13 06:40:10
【问题描述】:

我在我的 64 位 linux 机器上安装了 64 位的 ghostscript。我正在使用 ghost4j-0.5.0.jar 将 pdf 文件转换为 tiff 文件。我编写了一个 java 程序,它将 pdf 文件转换为 tiff 文件。这在 Windows 上运行良好,但是当我想到将其移至 linux 机器时,我收到以下错误。

“线程“主”java.lang.UnsatisfiedLinkError 中的异常:无法加载库“gs”:libgs.so:无法打开共享对象文件:没有这样的文件或目录”

我检查了 lib 文件夹,但在 lib 文件夹中找不到 libgs.so 文件。我不确定从哪里获得该文件。

谁能帮我解决这个问题?

【问题讨论】:

  • 应该在ghostscript的开发包里。包的确切名称取决于您的 linux 发行版。 libgs-dev 在 debian 衍生产品上,ghostscript-devel 在 Fedora 上,可能还有其他东西

标签: java imagemagick ghostscript ghost4j


【解决方案1】:

make soinstall 将创建所需的库以及https://www.ghostscript.com/doc/current/Install.htm#Shared_object 中提到的可执行文件

【讨论】:

    【解决方案2】:

    我觉得有点内疚,因为它可能在 ServerFault 或其中一个 Linux 板上更好地服务,而且问题已经超过 6 个月了,但我整天都在用头撞墙,终于找到了一个解决这个问题,我认为其他人可能会从中受益。

    系统:Windows 7CentOS 6.5

    使用:Ghostscript 9.14

    一点背景故事:

    与 OP 一样,我一直在 Windows 上运行 ghostscript 程序,将 PDF 转换为一系列图像。这工作得很好,直到我需要切换到 Linux 并运行程序并且我需要转换的大约 5% 的 PDF 出现了error cannot decode code stream。我意识到我在 Windows 上使用了更新版本的 ghostscript。 (由于通过 yum 安装,Windows 上为 9.14,而 CentOS 上为 8.70)。

    我用yum remove ghostscript 删除了旧版本。接下来,我发现安装最新版本的 Ghostscript 最简单的方法是从here 下载并编译。因为我用 yum 删除了以前版本的 ghostscript,所以我不得不更新usr/bin 中的链接,用ln -s /usr/local/bin/gs /usr/bin/gs 指向usr/local/bin/gs。一切就绪后,我想,我试图运行我的程序,然后砰,错误!

    解决问题:

    所以现在我得到了错误:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'gs': libgs.so: cannot open shared object file: No such file or directory

    我遇到了一个帖子 here 说要获得必要的 libgs.so 我需要返回并使用命令 make so 将源重建为共享库。我这样做了,然后我将ghostscript文件夹中sobin目录下的libgs.so.9.14文件复制到/usr/lib。在该目录下,我使用命令ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so 建立了指向libgs.so 的符号链接。

    完成后,我需要更新我的ld_library_path,但当我这样做时发现更改不是全局的,所以我找到了关于如何设置全局库路径的Unix & Linux post。基本上要这样做,您需要在/etc/ld.so.conf.d/ 中添加一个带有文件路径的.conf 文件。我这样做是使用vi /etc/ld.so.conf.d/libgs.conf 并将/usr/lib/libgs.so 添加到文件中。最后我跑了ldconfig 所以保存更改。

    TLDR:

    1. Download最新版Ghostscript来自源:wget http://downloads.ghostscript.com/public/ghostscript-9.14.tar.gz

    2. 解压tar:tar -xzf ghostscript-9.14.tar.gz

    3. cd ghostscript-9.14

    4. ./configure

    5. make make so,我是按这个顺序做的,所以我就这样离开了。

    6. make install

    7. make so

    8. 如果您使用 yum 删除了以前的版本 ln -s /usr/local/bin/gs /usr/bin/gs

    9. cp ghostscript-9.14/sobin/libgs.so.9.14 /usr/lib

    10. ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so

    11. vi /etc/ld.so.conf.d/libgs.conf

    12. 在新的 libgs.conf 文件中:/usr/lib/libgs.so 并使用 esc:wq 保存。

    13. ldconfig 完成。

    14. 运行您的转换程序。

    希望这会有所帮助并且不会太令人困惑。我还不是 linux 专家(还)所以我可能对上述命令做了一些不必要的工作,但我想彻底。

    【讨论】:

      【解决方案3】:

      我刚刚在 linux VM 上遇到了这个问题。我能够通过在系统上安装 ghostscript 来解决它。我只是使用了命令:

      sudo yum install ghostscript
      

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-24
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2019-02-16
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多