在 Ubuntu 上获取:“-bash: ./flume 没有这样的文件或目录”但 flume 存在且可执行。RHEL 上的相同二进制文件正常

在 Ubuntu 上获取:“-bash: ./flume 没有这样的文件或目录”但 flume 存在且可执行。RHEL 上的相同二进制文件正常

这已发布在 serverfault 中 - 可能更适合那里。根据原始帖子稍作修改。

我们有一款基于 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:没有这样的文件或目录

‘file flume’ 显示它是一个 32 位 ELF(不记得确切的输出,并且系统处于隔离网络上)

如果放入 /usr/local/bin,则 'which flume' 返回:/usr/local/bin/flume

该文件被标记为可执行文件(执行了‘chmod +x flume’)并且 lsattr 显示属性位没有问题。

我还没能尝试“ldd flume”。我也没有试过“strace 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

我遇到过类似的事情,最终是因为 libstdc++5 已从 ubuntu 10.04 和 9.10 中删除。我不知道为什么我收到的错误不是找不到 libstdc++,但是当我安装它(从 debian stable 中)时,错误就消失了。

答案3

我在 Ubuntu 12.04 64 位上运行 EXE 时也遇到了类似的问题。

对我来说,解决方案是在目标系统上安装 LSB:

sudo apt-get install lsb

以前无法运行的程序现在突然可以运行了。使用

strings EXE-NOT-WORKING | head -1

提供了密钥。EXE-NOT-WORKING 中标识的 LSB 加载程序的转速高于其他正在运行的 EXE 文件中显示的默认加载程序。

相关内容