为了提供一些背景知识,我使用 wkhtmltopdf 将本地文件转换.html
为 a 文件,.pdf
以用作我们的管道/发布的证据。
然而,生成的这个 html 有一些远程脚本和源。因此 wkhtmltopdf 尝试将这些内容添加到我们的 Azure 管道中。我们的管道运行 RHEL。
现在我在 0.12.4 版本中遇到的错误是某种 SSL 错误,该错误已在 0.12.5 版本中修复。所以我尝试安装 0.12.6 版本,它可以工作,但运行时出现以下错误:
tools/wkhtmltopdf: error while loading shared libraries: libpng15.so.15: cannot open shared object file: No such file or directory
我发现对于 CentOS/RHEL(YUM 和 RPM 包管理器),我们需要安装 libpng-devel。所以我尝试这样做:
yum --showduplicates list libpng-devel
yum -y install libpng-devel
这确实libpng-devel-2:1.6.34-5.el8.x86_64
在 RHEL 计算机上安装了版本,但在尝试解析 PDF 时我仍然遇到相同的错误。
我对 Linux 没有太多经验,我真的不知道如何解决这个问题,我也尝试搜索还有其他版本。但我有一台 Windows 开发机器,所以尝试任何事情都必须通过管道(每次大约需要 10 分钟)。
我也查看了 SE,发现这很接近:“加载共享库时出错:libpng15.so.15:无法打开共享对象文件:没有这样的文件或目录”?但从答案来看我不确定下一步该做什么。
TLDR:那么我该如何修复这个错误呢?我需要图书馆,但这不是我认为正确的图书馆?
编辑:我们在 Azure 中运行 RHEL,其他人制作了一个具有 wkhtmltopdf 版本 0.12.6 的 Artifact。
编辑2:输出yum repolist
仓库 ID | 仓库名称 |
---|---|
ubi-8-appstream | ubi-8-appstream |
ubi-8-baseos | ubi-8-baseos |
ubi-8-codeready-构建器 | 红帽通用基础映像 8 (RPM) - CodeReady Builder |
ubi-8-baseos | 41 kB/秒 - 3.8 kB 00:00 |
ubi-8-baseos | 3.9 MB/秒 - 798 kB 00:00 |
ubi-8-appstream | 51 kB/秒 - 4.2 kB 00:00 |
ubi-8-appstream | 8.0 MB/秒 - 2.6 MB 00:00 |
红帽通用基础映像 8 (RPM) - CodeRea | 37 kB/秒 - 3.8 kB 00:00 |
参数不匹配的输出yum install wkhtmltopdf -y
:wkhtmltopdf 错误:无法找到匹配项:wkhtmltopdf
解决方案:
上传的 0.12.6 包被破坏了,我上传了一个新的 rpm 包并且直接工作了。
答案1
从您安装的版本libpng-devel
来看,您使用的是 RHEL 8。
话虽如此,您安装的运行时库的版本太旧了。您不需要开发包,只需要提供运行时库的常规包。
假设您appstream
启用了存储库,您需要libpng15.i686
yum install libpng15.i686 -y
之后就可以/usr/lib/libpng15.so.15
在机器上看到了。
将来,如果您想查看提供库/标头/二进制文件或其他任何内容的包,
yum provides */file_name
答案2
此错误表示“库 libpng15.so.15 丢失”。您的安装描述听起来很可能您没有意识到您不能简单地将一个库版本交换为另一个库版本。
程序需要其共享库与其构建时完全相同的版本(或 ABI 兼容版本,但这基本上是“完全相同的版本”)。因此,不能仅将针对 .15 版本构建的 wkhtmltopdf 与任何其他版本一起使用!
因此,您需要重新安装完全针对您拥有的 libpng 版本构建的 wkhtmltopdf。
Linux 发行版的重点是确保您安装的软件引入它所需的库版本。因此,
所以我尝试安装 0.12.6 版本,它可以工作
不,事实并非如此,而这正是它的表现方式。您不能仅仅用 ABI 不兼容的版本替换 libpng 等系统库。
答案3
我发现了这个并且它对我有用:
sudo -i yum install compat-openssl10.x86_64