カーネルは、ユーザー空間と同じ開発環境でコンパイルする必要がありますか?

カーネルは、ユーザー空間と同じ開発環境でコンパイルする必要がありますか?

gcc 4.7私のユーザースペース(パッケージ)が(Debian Wheezy)にlibc6 2.13コンパイルされたとしましょう。

gcc 6.3他の開発環境(例:Debian Stretch)でLinuxカーネルをコンパイルできますかlibc6 2.24

パッケージとは異なり、カーネルは動的ライブラリに関連付けられていないことを知っています。したがって、理論的には、それがコンパイルされたgccものlibcとコンパイルされたものの間に違いはないはずです。

これは本当ですか?私がこれを行うと問題が発生しますか?gccバージョンが違って互換性が落ちるのではないでしょうか?

一方、最新バージョンにはgccいくつかの興味深い機能とより良いセキュリティ機能があります。それでは、カーネルを最新バージョンにコンパイルする必要がありますかgcc

ベストアンサー1

指摘したように、使用しているCライブラリは、Cライブラリを使用しないカーネルには影響しません。 (ビルドプロセス中にカーネルが使用するツールをビルドするために使用されるため、間接的な効果はありますが、最終結果に影響を与える可能性はほとんどありません。)

カーネルはドキュメントに応じてさまざまなコンパイラバージョンで構築でき、GCC 3.2以降のみが必要です。さらに、カーネルが最新バージョンのGCCを正式にサポートするのに時間がかかることがあり、リリースカーネルでそれを使用するのに時間がかかることがあります。たとえば、Debian LinuxカーネルパッケージはGCC 6を使用し、正しいコンパイラバージョンを提供する専用パッケージもあります(linux-compiler-gcc-6-x86およびamd64i386。カーネルに使用されるコンパイラとユーザー空間に使用されるコンパイラの間には接続がありません(また、すべてのユーザー空間に対して必ずしも同じコンパイラである必要はありません。GCC 3または2で構築された古いプログラムは最新のシステムで実行され続けます) 。

最新のコンパイラバージョンはより多くのセキュリティ機能を提供しますが、GCC 6はカーネルで使用されるほとんどの(すべてではありません)セキュリティ機能には十分です。

おすすめ記事