今天我遇到了一件让我很困惑的事情。一位同事正在使用他下载的特定预编译二进制文件(可用这里)。在他正在使用的 Ubuntu 10.04 LTS 服务器上,尝试执行此文件会导致文件未找到,即使权限设置正确也是如此。
然而,当我在 OpenSUSE 11.4 上尝试同样的事情时,它运行得很好。运行file
它给我:
ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),适用于 GNU/Linux 2.6.15,已剥离
Ubuntu 和 OpenSUSE 机器都是 64 位安装,并且file
在两台机器上返回相同的信息。
这对我来说看起来很好。在 opensuse 盒子上,LDD 甚至给了我一个简短的库文件列表。手工检查一下,所有这些指定的文件也存在于 Ubuntu 服务器上。但 Strace 输出有所不同:
打开使用:
execve("./trid", ["./trid"], [/* 122 vars */]) = 0
Ubuntu(给出完整路径不会改变结果):
execve("./trid", ["./trid"], [/* 19 vars */]) = -1 ENOENT (没有这样的文件或目录)
什么会导致这样的文件无法以这种方式执行?
答案1
类型
ldd ./trid
在 openSuse 和 Ubuntu 系统上都可以。
我怀疑您会发现后者缺少库文件。