Linux 内核不保证编译文件的向后兼容性吗?

Linux 内核不保证编译文件的向后兼容性吗?,linux,gcc,Linux,Gcc,简而言之: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的输

简而言之: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)                           = ?

您的错误消息中有一个文件丢失,因此您需要查找该文件的内容。因此使用:


从最后的结果开始回顾。其中一个结果应该是您丢失的文件。

Bash
是说未找到
/tmp/deployed/qt workstation
,您确定文件在那里吗?

我猜这与动态链接有关。我相信我在编译的可执行文件中看到过类似的错误,这些文件找不到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
解决了这个问题。

我甚至不确定内核版本是否是问题所在,我正在寻找问题的答案。不幸的是,我还不能用更小的代码重现这个问题。任何建议都可能对我有所帮助。我认为文本的意思是“找不到文件或目录”,所以使用它来查找缺少的文件。不,“内核”可能保证二进制格式的向后兼容性,但这不是“编译文件”或“链接库”。然而,一般来说,破坏性的更改是不受欢迎的,在内核API和已建立的库中非常罕见;可能根本没有必要的库。在任何情况下,“内核”都不能保证。对不起,忘记翻译输出了。这意味着找不到文件,但文件存在。我注意到他说文件没有找到…啊哈。
文件qt workstation
告诉您什么?我向您保证该文件存在。此外,当文件不存在时,strace甚至不会启动…我已将strace输出添加到我的问题中。正如您所看到的,它抱怨没有找到可执行文件本身……您的建议很有希望,我会检查它并给出反馈。
strace -o trace -f ./qt-workstation 
grep ENOENT trace