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

时间:2013-07-15 11:49:12

标签: 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文件。我不知道从哪里获得该文件。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:4)

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

系统:Windows 7CentOS 6.5

使用:Ghostscript 9.14

一个小故事:

与OP一样,我在Windows上运行ghostscript程序将PDF转换为一系列图像。这工作正常,直到我需要切换到Linux并运行程序,我需要转换的大约5%的PDF提出error cannot decode code stream。我意识到我在Windows上使用的是较新版本的ghostscript。 (Windows上的9.14与CentOS上的8.70相比,因为通过yum安装)。

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

解决问题:

所以现在我收到了错误:

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文件放在ghostscript文件夹中的sobin目录下并将其复制到/usr/lib。在该目录下,我使用命令libgs.so建立了ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so的符号链接。

一旦完成,我需要更新我的ld_library_path,但发现当我这样做时,更改不是全局的,所以我找到了Unix & Linux post如何设置全局lib路径。基本上这样做,您需要在.conf中添加/etc/ld.so.conf.d/文件以及文件路径。我使用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. 运行转换程序。

  15. 希望这有助于并且不会让人感到困惑。我还不是Linux专家,所以我可能会用上面的命令做一些不必要的工作,但我想要彻底。

答案 1 :(得分:2)

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

sudo yum install ghostscript

希望有所帮助!

答案 2 :(得分:0)

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