2012-04-18 5 views
1

簡単に:Linuxカーネル2.6.32コンパイル済みの実行ファイルは、Linuxカーネル2.6.24カーネルと互換性がありませんか?カーネルはコンパイルされたファイルに対して後方互換性を保証していませんか?

私は、Linux 2.6.32カーネルのシステムでコンパイルした実行可能ファイルを持っています。

[email protected]:/tmp/deployed$ ./qt-workstation 
bash: ./qt-workstation: Arquivo ou diretório não encontrado 

テキストは、「ファイルまたはディレクトリが見つかりません」という意味が、ファイルが存在している:私は、Linux 2.6.24システムにコンパイルされたファイルを転送するとき、実行するときに、私は次のエラーを取得します。 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

カーネルのバージョンが問題であるかどうかはわかりませんが、私は問題でいくつかの光を探しています。残念ながら私はまだ小さなコードで問題を再現できませんでした。どんな提案も私を助けるかもしれません。 –

+3

私は、テキストは「ファイルまたはディレクトリが見つかりません」という意味なので、[strace](http://linux.die.net/man/1/strace)を使って見つからないファイルを探してください。 – jimw

+0

Uh、no。 "カーネル"は*バイナリ形式*の下位互換性を保証するかもしれないが、これは "コンパイルされたファイル"や "リンクされたライブラリ"ではない。しかし、一般的に、カーネルAPIと確立されたライブラリでは、壊れた変更は却下され、非常にまれです。必要なライブラリが存在しない場合もあります。いずれにしても、「カーネル」による保証はありません。 –

答えて

1

私はこれが動的リンクに関係していると推測しています。私はld.soやld-linux.soなどが見つからないコンパイルされた実行ファイルからこのようなエラーが発生したと考えています。

#! 'dスクリプトの場合、スクリプトはウィンドウから転送され、パス名の最後にcontrol-Mがある場合を含め、#!'インタプリタが見つからない場合に発生します。

strings ./qt-workstation | headを実行して更新

私は私のld-linux.soがUbuntuで、このファイルは別の場所に配置され、(コマンドの最初の出力)/lib/ld-linux-x86-64.so.2にハードコードされたことが分かりました。

/lib/ld-linux-x86-64.so.2の記号を作成することで問題は解決します。

+0

あなたの提案は非常に有望ですが、私はそれをチェックし、フィードバックを与えます。 –

1

あなたのエラーメッセージファイルが不足していると不平を言っているので、そのファイルが何であるかを調べる必要があります。したがって、straceを使用してください:

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

最後の結果から後方を見てください。結果の1つが不足しているファイルである必要があります。

+0

私はstraceの出力を私の質問に追加しました。ご覧のとおり、実行ファイル自体が見つかりませんでした... –

0

Bashは、/tmp/deployed/qt-workstationが見つかりませんでした、あなたはファイルがありますか?

+0

ファイルが存在することを保証します。また、ファイルが存在しない場合、strace doesntも起動します... –