我们有一个基于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系统,一切都很好。 但我确定想知道是什么原因造成的。
你可以得到这个消息,如果水槽存在,但它的“加载器”不存在,在哪里
/lib/ld-linux.so.2 ; /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