奇怪的可执行行为

奇怪的可执行行为

我有一台装有 ubuntu 9.10 的服务器。我试图安装一个可执行文件,结果是最新的 flashplayer(调试器版本)。

不知何故,该文件显示为存在且可执行,但启动时控制台显示该文件不存在:

rodrigo@ns360773:~/t_fplayer$ pwd
/home/rodrigo/t_fplayer
rodrigo@ns360773:~/t_fplayer$ ls -lh
total 12M
-rwxr-xr-x 1 rodrigo rodrigo 12M 2011-07-09 11:35 flashplayerdebugger
rodrigo@ns360773:~/t_fplayer$ ./flashplayerdebugger
-bash: ./flashplayerdebugger: No such file or directory
rodrigo@ns360773:~/t_fplayer$ ldd flashplayerdebugger
       not a dynamic executable

在我的本地机器上使用相同的可执行文件(通过 ssh 复制)工作正常。

知道发生了什么吗?什么可以解释这种行为?

知道如何修复这个问题吗?

答案1

检查架构:如果您没有安装兼容库,则在 AMD64 系统上运行 x86 二进制文件时会收到该消息。

此外,Ubuntu 9.04 不再更新,因此您可能需要更新它。

答案2

无论是静态还是动态,它仍然使用动态加载的“解释器”,在 Linux 上通常名为ld-linux.so.VERSION。如果你有一个可执行文件需要不存在的解释器版本,比如当你试图在旧系统上使用较新的二进制文件时,你会得到那个错误,因为解释器未找到。(并且错误消息令人遗憾但无法修复,除非内核扩展了更好的错误报告 API;所有 shell 只知道它得到了ENOENT对的响应execve("./flashplayerdebugger", ...)。)所以我的猜测是您正在尝试在旧服务器上运行为 Ubuntu 11.x 编译的二进制文件,这是徒劳的 — 您需要为 Ubuntu 9.10 编译一个。

答案3

这可能是由于缺少 32 位环境造成的。您可以尝试使用 strace 来查找到底缺少了什么:strace ./flashplayerdebugger。您应该会看到一些不存在的库的 open()。

相关内容