1

简而言之:Linux 内核 2.6.32 编译的可执行文件与 Linux 内核 2.6.24 内核不兼容吗?

我有一个在带有 linux 2.6.32 内核的系统中编译的可执行文件。当我将编译后的文件传输到linux 2.6.24系统时,执行时出现以下错误:

bremm@bezier:/tmp/deployed$ ./qt-workstation
bash: ./qt-workstation: Arquivo ou diretório não encontrado

文本表示“找不到文件或目录”,但文件存在。strace 的输出:

execve("./qt-workstation", ["./qt-workstation"], [/* 46 vars */]) = -1 ENOENT (No such file or directory)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f78e84f5000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
close(3)                                = 0
munmap(0x7f78e84f5000, 4096)            = 0
exit_group(1)                           = ?
4

3 回答 3

1

您的错误消息抱怨缺少文件,因此您需要找到该文件是什么。因此使用strace

strace -o trace -f ./qt-workstation 
grep ENOENT trace

并从最后一个结果开始向后看。结果之一应该是您丢失的文件。

于 2012-04-18T19:15:43.183 回答
1

我猜这与动态链接有关。我相信我已经从无法找到 ld.so 或 ld-linux.so 或类似的编译可执行文件中看到了类似的错误。

对于 #!'d 脚本,当找不到 #!'d 解释器时,可能会发生这种情况 - 包括当脚本从 windows 传输并在路径名末尾有 control-M 时。

更新

运行strings ./qt-workstation | head我发现我的 ld-linux.so 被硬编码为/lib/ld-linux-x86-64.so.2(命令的第一个输出),在 Ubuntu 上,这个文件位于其他地方。

创建一个符号来/lib/ld-linux-x86-64.so.2解决问题。

于 2012-04-19T01:27:19.483 回答
0

Bash是那句话/tmp/deployed/qt-workstation没有找到,你确定文件在那里吗?

于 2012-04-18T19:24:22.213 回答