Kno*_*dge 3 linux binary bash webserver wkhtmltopdf
我尝试在Linux共享网络服务器(Debian,64位)上使用可执行脚本(wkhtmltopdf).我很确定我编译的所有内容都是正确的,但每当我想执行该文件时,我都会得到一个响应:
> ./wkhtmltopdf -H
-bash: ./wkhtmltopdf: No such file or directory
Run Code Online (Sandbox Code Playgroud)
为了确保文件存在,这里是ls输出:
> ls
wkhtmltoimage wkhtmltopdf
Run Code Online (Sandbox Code Playgroud)
此外,我测试了文件命令,输出以下内容:
> file wkhtmltopdf
wkhtmltopdf: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
Run Code Online (Sandbox Code Playgroud)
我现在的问题是:
为什么bash告诉我没有'文件或目录',显然有一个?
我的第一个猜测是共享服务器不允许执行二进制文件?但是,它不应该是一个权限问题,具有不同的bash输出?
编辑:
> id
uid=2725674(p8907906) gid=600(ftpusers) groups=600(ftpusers)
> ls -l wkhtmltopdf
-rwxrwxrwx 1 p8907906 ftpusers 39745960 Jan 20 09:33 wkhtmltopdf
> ls -ld
drwx---r-x 2 p8907906 ftpusers 44 Jan 28 21:02 .
Run Code Online (Sandbox Code Playgroud)
我打赌你错过了动态链接器.做一个
readelf --all ./wkhtmltopdf | grep interpreter
Run Code Online (Sandbox Code Playgroud)
你应该得到这样的输出:
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
Run Code Online (Sandbox Code Playgroud)
您的系统很可能缺少解释器(/lib64/ld-linux-x86-64.so.2在示例中).在这种情况下,bash会大喊大叫No such file or directory,就像二进制文件本身缺失一样.
您可以尝试使用其他链接器.有时你可以成功.做一个:
/path/to/the/linker /path/to/your/executable
Run Code Online (Sandbox Code Playgroud)
这个命令:
find /lib* -name ld-linux\*
Run Code Online (Sandbox Code Playgroud)
将帮助您找到系统上的链接器.或者你可以做readelf的一些命令命令不运行.它将向您显示正确的,有效的链接器.
或者,既然您正在运行Debian系统,那就做一个
sudo apt-get install wkhtmltopdf
Run Code Online (Sandbox Code Playgroud)
安装本机版本的工具:)
就我而言
$ readelf --all ./wkhtmltopdf | grep interpreter # readelf: Displays information about ELF files.
[Requesting program interpreter: /lib/ld-linux.so.2]
Run Code Online (Sandbox Code Playgroud)
在可执行文件正在运行的机器上:
$ ls -lah /lib/ld-linux.so.2
lrwxrwxrwx 1 root root 25 Apr 16 2018 /lib/ld-linux.so.2 -> i386-linux-gnu/ld-2.27.so
$ dpkg -S /lib/ld-linux.so.2 # -S, --search filename-search-pattern: Search for a filename from installed packages.
libc6:i386: /lib/ld-linux.so.2
Run Code Online (Sandbox Code Playgroud)
所以要解决这个问题(参考)
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 # GNU C Library: Shared libraries (from apt show)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2075 次 |
| 最近记录: |