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

我们有一个基于CentOS 4 32位Linux构build的产品,它在32位和64位CentOS / RHEL 4和5以及SLES 10上未经修改即可运行。它还可以在SLES 9 64位上未修改地运行。 [SLES 9 32位需要不同的libstdc ++。

主二进制可执行文件的名字是flume

昨天我们试图把它放在64位的Ubuntu 10上,尽pipe这个文件在那里,而且尺寸合适,我们得到了:

 -bash: ./flume: No such file or directory 

file flume显示它是一个32位ELF(不记得确切的输出,系统是在一个孤立的networking上)

如果放入/usr/local/bin ,那么:

 which flume /usr/local/bin/flume 

我还没有尝试ldd flume

我现在怀疑有些图书馆不在那里。

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

这是Ubuntu特有的,或者只是这个安装。

我们放弃了,转移到RHEL 4系统,一切都很好。 但我确定想知道是什么原因造成的。

你可以得到这个消息,如果水槽存在,但它的“加载器”不存在,在哪里

  • 本地可执行文件的加载器是其dynamic加载器,例如/lib/ld-linux.so.2 ;
  • 脚本的加载程序是在它的shebang行中提到的程序,例如/bin/sh如果脚本以#!/bin/sh开头)。

在你的情况下,它看起来像你没有在64位Ubuntu系统上安装的32位dynamic加载器。 它在libc6-i386包中。

strings ./flume | head -n 1 strings ./flume | head -n 1将显示通道所需的dynamic加载程序的path。 这是strace ./flume完全无益的罕见情况之一。

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

您是否尝试赋予该文件的执行权限?

 chmod +x ./flume