首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核不能保证编译文件的向后兼容性吗?

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

Stack Overflow用户
提问于 2012-04-19 03:11:14
回答 3查看 1.4K关注 0票数 1

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

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

代码语言:javascript
复制
bremm@bezier:/tmp/deployed$ ./qt-workstation
bash: ./qt-workstation: Arquivo ou diretório não encontrado

文本的意思是“未找到文件或目录”,但该文件存在。strace的输出:

代码语言:javascript
复制
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)                           = ?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-19 09:27:19

我猜这与动态链接有关。我相信我见过这样的错误,因为编译后的可执行文件找不到ld.so或ld-linux.so或类似的文件。

对于#!'d脚本,当找不到#!'d解释器时会发生这种情况-包括脚本是从windows传输过来的,并且在路径名的末尾有一个控制-M。

更新

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

创建一个符号化的/lib/ld-linux-x86-64.so.2可以解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2012-04-19 03:15:43

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

代码语言:javascript
复制
strace -o trace -f ./qt-workstation 
grep ENOENT trace

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-19 03:24:22

Bash提示找不到/tmp/deployed/qt-workstation,你确定文件在那里吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10216276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档