我安装了 /bin/sh:wkhtmltopdf/usr/bin/
目录。但是,当我尝试通过进入/usr/bin/wkhtmltopdf
shell 来运行该程序时,我收到错误/bin/sh: /usr/bin/wkhtmltopdf: not found
。但是,如果我输入sh /usr/bin/wkhtmltopdf
.这是为什么?我该如何解决它?
权限是ls -l
:
-rwxr-xr-x 1 1000 1000 38.0M Nov 22 2016 wkhtmltopdf
type -a wkhtmltopdf : /usr/bin/wkhtmltopdf
编辑:
我使用的操作系统是Alpine Linux
输出ldd wkhtmltopdf
:
/usr/bin # ldd wkhtmltopdf
/lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
/usr/lib/preloadable_libiconv.so => /usr/lib/preloadable_libiconv.so (0x7f8871fec000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x7f8871fe0000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x7f8871fa4000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x7f8871ef3000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x7f8871ee1000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x7f8871dbe000)
libz.so.1 => /lib/libz.so.1 (0x7f8871da4000)
libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
librt.so.1 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f8871c4f000)
libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f8871c3b000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by wkhtmltopdf)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x7f8871c18000)
libuuid.so.1 => /lib/libuuid.so.1 (0x7f8871c0f000)
libbz2.so.1 => /usr/lib/libbz2.so.1 (0x7f8871c00000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x7f8871bd0000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x7f8871ba9000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x7f8871ba4000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x7f8871b9c000)
libbsd.so.0 => /usr/lib/libbsd.so.0 (0x7f8871b88000)
我通过在 Docker 中运行以下命令来安装 wkhtmltopdf:
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && \
tar xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && \
mv wkhtmltox/bin/wkhtmltopdf /usr/bin/ && mv wkhtmltox/bin/wkhtmltoimage /usr/bin
答案1
如输出所示ldd
,该wkhtmltopdf
二进制文件是针对 glibc 构建的,GNU C 库:
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f88720cc000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by wkhtmltopdf)
这库库实现了 C 标准库函数,以及 POSIX API ( libc.so.6
) 和动态链接器 ( ld-linux-x86-64.so.2
)。 glibc 是最常见的 libc 实现,大多数 Linux 发行版都使用它。
在 Alpine Linux 上,musl-libc 库用来。 musl 本质上更加简约,旨在实现强大的 POSIX 合规性。 musl 的库文件是libc.musl-x86_64.so.1
,动态链接器是ld-musl-x86_64.so.1
。因此,链接到 glibc 的程序将无法链接到 musl libc。
要在 Alpine Linux 上运行 glibc 程序,通常需要安装 glibc,如下所述这里。在某些情况下,如果只需要基本的 glibc 兼容性,安装libc6-compat
musl-glibc 兼容包就足够了。
然而,更好的选择是安装相应的 Alpine 软件包(如果可用的话)(根据我的经验,在大多数情况下是这样)。对于您的情况,只需安装wkhtmltopdf
软件包(Alpine 3.9+):apk add wkhtmltopdf
.