java - 无法加载库 'gs' : libgs. 所以:无法打开共享对象文件:没有这样的文件或目录

标签 java imagemagick ghostscript ghost4j

我在我的 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 文件。我不确定从哪里获得该文件。

谁能帮我解决这个问题?

最佳答案

我觉得有点内疚,因为它可能在 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 中的链接指向usr/local/bin/gsln -s /usr/local/bin/gs /usr/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 将源重建为共享库.我这样做了,然后我拿了libgs.so.9.14 sobin 下的文件Ghostscript文件夹中的目录并将其复制到/usr/lib .在那个目录下,我创建了一个指向 libgs.so 的符号链接(symbolic link)。使用命令 ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so .

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

TLDR:

  • Download来自源的最新版本的 Ghostscript:wget http://downloads.ghostscript.com/public/ghostscript-9.14.tar.gz
  • 解压 tar :tar -xzf ghostscript-9.14.tar.gz
  • cd ghostscript-9.14
  • ./configure
  • make <-- 您可以跳过并转到 make so ,我是按这个顺序做的,所以我会这样。
  • make install
  • make so
  • 如果您使用 yum 删除了以前的版本ln -s /usr/local/bin/gs /usr/bin/gs
  • cp ghostscript-9.14/sobin/libgs.so.9.14 /usr/lib
  • ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so
  • vi /etc/ld.so.conf.d/libgs.conf
  • 在新的 libgs.conf 文件中:/usr/lib/libgs.so并用 esc 保存,:, wq .
  • ldconfig并做了。
  • 运行您的转换程序。

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

    关于java - 无法加载库 'gs' : libgs. 所以:无法打开共享对象文件:没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17653569/

    相关文章:

    node.js - 获取一张图像在另一张图像中的位置

    ImageMagick - 使用 IM 转换将 2 个 GIF 变成并排的 GIF

    pdf - 奇怪的问题,ghostscript 和 pdf 文件

    php - 使用 Ghostscript 密码保护 PDF

    node.js - AWS Lambda 函数 - 将 PDF 转换为图像

    java - Guice Java 提供了没有已知依赖性的方法?

    java - FragmentPagerAdapter 的第二个 fragment 中的访问受限

    java - 使用 appcompat 库不会改变通知栏背景

    java - GSM 调制解调器以 UCS2 格式发送消息错误

    imagemagick - 使用imagemagick在图像顶部添加边框