6

最新のLinuxマシンでプログラムを静的にコンパイルしてリンクし、9年前の別のLinuxで実行しました。「致命的:カーネルが古すぎます」というエラーが表示され、終了しました。具体的には、新しいものはFedora 18(gcc 4.7.2、glibc 2.16、カーネル3.7.2)であり、古いものはRHEL4.8(glibc 2.3.4、カーネル2.6.9)です。静的リンクであるため、glibcのバージョンは重要ではありません。ここでの問題は、プログラムが古いカーネルにないシステムコールを呼び出すことだと思います。

古いシステムでの開発が選択肢にない場合、新しいシステムでプログラムをビルドし、古いシステム(またはさらに良い方法、両方)で実行するにはどうすればよいですか?古いシステムコールのみを呼び出す互換モードでgccを実行する方法を探していました。まだ運がない。

4

1 に答える 1

5

最も簡単なオプションは、常に古いシステムでビルドすることです。

または、glibc ヘッダーと静的ライブラリを古いシステムから新しいシステムにコピーし、それらに対してリンクします。

それでもうまくいかない場合は、glibc を再構築する必要があります--enable-kernel=2.6.9

于 2013-01-16T17:04:41.047 に答える