/bin/sh: wkhtmltopdf 디렉토리를 설치했습니다 /usr/bin/
. 그러나 쉘에 들어가서 프로그램을 실행하려고 하면 /usr/bin/wkhtmltopdf
오류가 발생합니다 /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
편집하다:
제가 사용하는 OS는 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)
그만큼libc라이브러리는 C 표준 라이브러리 함수는 물론 POSIX API( libc.so.6
) 및 동적 링커( ld-linux-x86-64.so.2
)를 구현합니다. glibc는 가장 일반적인 libc 구현이며 대부분의 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
패키지(알파인 3.9+): apk add wkhtmltopdf
.