简要说明: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) = ?
答案 0 :(得分:1)
您的错误消息抱怨丢失的文件,因此您需要找到该文件的内容。因此使用strace:
strace -o trace -f ./qt-workstation
grep ENOENT trace
并从最后的结果开始向后看。其中一个结果应该是您丢失的文件。
答案 1 :(得分:1)
我猜这与动态链接有关。我相信我从编译后的可执行文件中看到了这样的错误,这些可执行文件找不到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
创建符号可以解决问题。
答案 2 :(得分:0)
Bash
是说找不到/tmp/deployed/qt-workstation
的人,你确定文件在那里吗?