我们有一款基于 CentOS 4 32 位 Linux 的产品,该产品无需修改即可在 32 位和 64 位 CentOS/RHEL 4 和 5 以及 SLES 10 上运行。该产品也可在 SLES 9 64 位上运行,无需修改。[SLES 9 32 位需要不同的 libstdc++。
主二进制可执行文件的名称是flume
昨天我们尝试将其放在 64 位 Ubuntu 10 上,尽管文件在那里并且大小正确,但我们得到:
-bash: ./flume: No such file or directory
file flume
显示它是一个 32 位 ELF(不记得确切的输出并且系统处于隔离网络上)
如果代入/usr/local/bin
,则:
which flume
/usr/local/bin/flume
我还没尝试
ldd flume
。
我现在怀疑有些图书馆不存在。
这是一个极其无益的信息,我从未见过这样的信息。
这是 Ubuntu 独有的现象吗?或者仅仅是本次安装独有的现象?
我们放弃了,转而使用 RHEL 4 系统,一切都很好。但我真的很想知道是什么原因造成的。
答案1
如果 flume 存在但其“加载器”不存在,则您会收到此消息,其中
- 本机可执行文件的加载器是其动态加载器,例如
/lib/ld-linux.so.2
; - 脚本的加载器是其 shebang 行中提到的程序,例如,
/bin/sh
如果脚本以 开头#!/bin/sh
。
就你的情况而言,你似乎没有在 64 位 Ubuntu 系统上安装 32 位动态加载程序。它在软件包中libc6-i386
。
strings ./flume | head -n 1
将显示所需的动态加载程序的路径flume
。这是少数完全无用的情况之一strace ./flume
。
我认为这种情况是 Unix 最容易引起误解的错误消息。不幸的是,修复它很困难:内核只能向程序调用者报告数字错误代码,因此它只能容纳“未找到命令”,而不能容纳它要查找的加载程序的名称。
答案2
您是否尝试授予该文件执行权限?
chmod +x ./flume