/ 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はAlpineLinuxです
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に対してリンクされたプログラムは、musllibcに対してリンクできません。
Alpine Linuxでglibcプログラムを実行するには、通常、説明されているようにglibcをインストールする必要があります ここ 。場合によっては、基本的なglibc互換性のみが必要な場合は、musl-glibc互換性パッケージであるlibc6-compat
をインストールするだけで十分です。
ただし、対応するAlpineパッケージが利用可能な場合は、それをインストールすることをお勧めします(私の経験では、ほとんどの場合、そうです)。あなたの場合は、 wkhtmltopdf
パッケージ(Alpine 3.9 +):apk add wkhtmltopdf
をインストールするだけです。