web-dev-qa-db-ja.com

libcバージョンはカーネルバージョンに関連付けられていますか?

私の 前の質問 への答えを読んだ後、次の質問への答えが私が実際に探していたものであるという結論に達しました:

カーネルの特定のバージョンが適切に動作するにはlibcの特定のバージョンが必要ですか?

基本的に私の問題は、12.04 ubuntuでアプリケーションをビルドし、8.04で実行しようとすることに起因します。それ以来、この問題や他のstackexchangeフォーラムから、libcの下位互換性がこれらの問題の原因であることを学びました。したがって、おそらく私がやろうとしていることは、ターゲット上に存在する同じバージョンのlibcをビルドし、アプリケーションをビルドするときにホスト上でそれとリンクすることです。理想的な世界では、これをホストにコピーすると、「正しい」libcにリンクされているため、動作するはずです(少なくとも私の頭の中では)。システムに古いlibcをインストールする方法を見つけることができず、各バージョンがカーネルバージョンに緊密にバインドされているかどうか疑問に思ったため、上記の質問です。

7

カーネルの特定のバージョンが適切に動作するにはlibcの特定のバージョンが必要ですか?

はい、好みのlibcバージョンを使用してソースからカーネルを自分でビルドしない限り、可能です。 buntuカーネル は、ターゲットリリースの前のLTSリリースで構築されているため、8.04 libcと互換性のある「最新の」UbuntuカーネルはUbuntu 9.10のものでした。

4
ish

それらはある意味で互いに結びついています。

  • 実行しているカーネルは、特定のlibcでコンパイルされています。
  • 特定のバージョン以上のカーネルのみをサポートするように、libcがコンパイルされました。

したがって、カーネルパッケージとlibcパッケージをUbuntuリポジトリからインストールする場合、それらを自分でコンパイルするのではなく、上記のジレンマに悩まされます。

Libcに関する限り、提案することを行う1つの方法は、ソースon 8.04から12.04カーネルをコンパイルし、それを8.04 libcにリンクすることです。次に、そのカスタムカーネルを使用して12.04を起動し、8.04にあるlibcバージョンをソースからもコンパイルします。それをインストールすると、アプリケーションは同じ古い8.04 libcを共有するはずです。

また、アプリケーションがリンクされている他の12.04ライブラリが8.04で使用できない可能性があることを認識しているため、ソースからもコンパイルする必要があります...

まとめると、8.04でコンパイルするのが最善です

5
Bogie