如何在 Linux 下正确安装 Ghostscript 作为共享库

Posted

技术标签:

【中文标题】如何在 Linux 下正确安装 Ghostscript 作为共享库【英文标题】:How to properly install Ghostscript under Linux as shared library 【发布时间】:2020-07-28 15:39:26 【问题描述】:

此页面上的链接 (https://www.ghostscript.com/download.html) 适用于 Linux x64,为您提供带有可执行二进制文件的 .tgz。

但是,在尝试通过 Ghost4J 将此二进制文件用作 .so 时(在将其重命名为 libgs.so 并放入适当的位置后),我总是收到如下错误:

java.lang.UnsatisfiedLinkError: /tmp/jna-100923095/jna3513656669313044092.tmp: cannot dynamically load executable

一旦我通过 apt-get install ghostscript 安装了 Ghostscript,相同的代码运行良好(因为它现在从 /usr/lib/x86_64-linux-gnu/libgs.so.9.22 加载 .so)

问题:我应该将哪些最小文件集放到某个文件夹中,以便我可以成功链接到 Ghostscript 动态库 (.so),而无需在机器/容器上安装 Ghostscript?

UPD:在Windows下,这似乎是可能的,安装的/bin文件夹包含DLL和EXE文件;如果我将该 .dll 文件放入resources 下的win32-x86-64 文件夹中,JNA (通过 Ghost4j)正在拾取它,并且即使我删除了“官方”安装,Ghostscript 实例也可以正常工作)。我也希望 Linux 具有相同的行为(即自给自足、自包含 JAR 文件)。

【问题讨论】:

【参考方案1】:

好吧,我最终自己构建了共享对象,使用安装为 WSL 1 发行版的 Ubuntu 18.04,遵循此处的指南:https://www.ghostscript.com/doc/current/Make.htm#Shared_object

这些是确切的命令:

./configure --without-luratech --with-system-libtiff --with-drivers=PCLXL
make so

然后,在sobin 文件夹中,您有libgs.so,它按预期工作。但遗憾的是无法从官方网站下载。

【讨论】:

坦率地说,你很幸运可执行文件在 Linux 上为你工作。 Linux 发行版之间的差异意味着为一个发行版构建的二进制文件很有可能不适用于其他发行版。我们无法跟踪所有的分布,所以我们只构建一个。如果您想要一个共享库,则期望您自己构建它。当然,你可以向你的包维护者提出这样的要求。 很高兴收到来自社区的直接回复!是的,我已经在 WSL Ubuntu 下构建了 .so,它似乎在 RHEL 下工作(到目前为止!)。现在我看到甚至有一个可用于 Ubuntu 的 libgs 包。我没有想到它可能存在。是否值得考虑在 GS 网站的下载页面上添加此类免责声明?

以上是关于如何在 Linux 下正确安装 Ghostscript 作为共享库的主要内容,如果未能解决你的问题,请参考以下文章

如何重启MySQL,正确启动MySQL

在linux下怎么安装rmp的文件

Ubuntu下安装lib库

CentOS7下如何正确安装并启动Docker(图文详解)

linux终端下如何安装Matplotlib,求完整命令

如何在 Linux 上的 Intellij 中逐步正确安装 java 和 javafx? [复制]