-bash: ./flume: 没有这样的文件或目录但是水槽在那里并且在其他地方工作

lcb*_*ard 6 ubuntu bash

我们有一个构建在 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
Run Code Online (Sandbox Code Playgroud)

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

如果放入/usr/local/bin,则:

which flume
/usr/local/bin/flume
Run Code Online (Sandbox Code Playgroud)

我还没有尝试 ldd flume

我现在怀疑某个图书馆不存在。

这是一个非常无益的信息,也是我以前从未见过的。

这是 Ubuntu 特有的,还是仅此安装特有的。

我们放弃并转向 RHEL 4 系统,一切都很好。但我确实想知道是什么导致了这种情况。

Gil*_*il' 9

如果flume存在但它的“loader”不存在,你可以得到这个消息,其中

  • 本机可执行文件的加载器是它的动态加载器,例如/lib/ld-linux.so.2
  • 脚本的加载器是在其shebang行中提到的程序,例如,/bin/sh如果脚本以#!/bin/sh.

在您的情况下,您似乎没有在 64 位 Ubuntu 系统上安装 32 位动态加载程序。它在libc6-i386包裹里。

strings ./flume | head -n 1将显示所需的动态加载程序的路径flume。这是strace ./flume完全没有帮助的罕见情况之一。

我认为这种情况是 Unix 中最具误导性的错误信息。不幸的是修复它会很困难:内核只能向程序的调用者报告一个数字错误代码,所以它只有“未找到命令”的空间,而不是它正在寻找的加载器的名称。