/bin/sh:/usr/bin/wkhtmltopdf:未找到
我安裝了 /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
如
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)
libc庫實現了 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
:.