我觉得有点内疚,因为它可能在 ServerFault 或其中一个 Linux 板上更好地服务,而且这个问题已经超过 6 个月了,但我整天都在用头撞墙,终于找到了解决方案问题,我认为其他人可能会从中受益。
系统:Windows 7
和CentOS 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 最简单的方法是从这里下载并编译。由于我用 yum 删除了以前版本的 ghostscript,我不得不更新链接usr/bin
以指向usr/local/bin/gs
with ln -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
我在这里遇到了一篇帖子,上面说要获得必要的东西,libgs.so
我需要返回并使用命令将源重建为共享库make so
。我这样做了,然后我将ghostscript 文件夹中目录libgs.so.9.14
下sobin
的文件复制到/usr/lib
. 在该目录下,我创建了一个符号链接以libgs.so
使用 command ln -s /usr/lib/libgs.so.9.14 /usr/lib/libgs.so
。
一旦完成,我需要更新我的ld_library_path
,但是当我这样做时发现更改不是全局的,所以我找到了一篇关于如何设置全局库路径的Unix 和 Linux 帖子。基本上要这样做,您需要添加一个带有.conf
文件/etc/ld.so.conf.d/
路径的文件。我这样做是使用vi /etc/ld.so.conf.d/libgs.conf
并添加/usr/lib/libgs.so
到文件中。最后我跑了ldconfig
,所以保存更改。
TLDR:
从源下载最新版本的 Ghostscript:wget http://downloads.ghostscript.com/public/ghostscript-9.14.tar.gz
解压焦油: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 专家(还)所以我可能对上述命令做了一些不必要的工作,但我想彻底。