1

簡単に言うと、Linuxカーネル2.6.32でコンパイルされた実行可能ファイルはLinuxカーネル2.6.24カーネルと互換性がありませんか?

Linux2.6.32カーネルを搭載したシステムでコンパイルした実行可能ファイルがあります。コンパイルされたファイルをLinux2.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

最後の結果から振り返り始めます。結果の1つは、不足しているファイルです。

于 2012-04-18T19:15:43.183 に答える
1

これはダイナミックリンクに関係していると思います。ld.soやld-linux.soなどが見つからなかったコンパイル済み実行可能ファイルからこのようなエラーが発生したと思います。

#!'dスクリプトの場合、これは、#!' dインタープリターが見つからない場合に発生する可能性があります。これには、スクリプトがWindowsから転送され、パス名の末尾にcontrol-Mがある場合も含まれます。

アップデート

実行すると、ld-linux.soが(コマンドの最初の出力)strings ./qt-workstation | headにハードコーディングされていることがわかりました。Ubuntu/lib/ld-linux-x86-64.so.2では、このファイルは別の場所にあります。

/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 に答える