GNU/Linux >> Linux の 問題 >  >> Linux

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

私のユーザースペース(パッケージ)がgcc 4.7でコンパイルされているとしましょう およびlibc6 2.13 (Debian Wheezy)

gcc 6.3などの異なる開発環境でLinuxカーネルをコンパイルできますか? およびlibc6 2.24 (つまり、Debian Stretchの下で)?

パッケージとは異なり、カーネルはダイナミックライブラリとリンクされていないことを私は知っています。したがって、理論的には、どのgccでも違いはありません。 およびlibc 下でコンパイルされました。

これは本当ですか?
これを行うと問題が発生する可能性がありますか?
異なるgccによって引き起こされるいくつかの非互換性がある可能性があります バージョン?

一方、新しいgcc いくつかの興味深い機能、より良いセキュリティがあります。したがって、おそらくカーネルは最新のgccでコンパイルする必要があります ?

承認された回答:

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

カーネルは、さまざまなバージョンのコンパイラで構築できます。そのドキュメントによると、GCC3.2以降のみが必要です。また、カーネルが最新バージョンのGCCを公式にサポートするまでにはしばらく時間がかかる場合があり、ディストリビューションカーネルがそれを使用するまでにはさらに時間がかかる場合があります。たとえば、DebianLinuxカーネルパッケージはGCC6​​を使用し、正しいコンパイラバージョン(linux-compiler-gcc-6-x86)を提供するための専用パッケージもあります。 amd64で およびi386 )。カーネルに使用されるコンパイラとユーザースペースに使用されるコンパイラの間に接続はありません(また、すべてのユーザースペースに同じコンパイラを使用する必要はありません。GCC3または2で構築された古いプログラムは、最新のシステムでも動作します)。

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


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. Linux – / dev / urandomで「u」という文字は何を意味しますか?

  3. Linux – Linuxカーネルはマイクロカーネルアーキテクチャとどのように比較されますか?

  1. Linux カーネルは __init 呼び出しの順序をどのように決定しますか?

  2. Linux カーネルにはメイン機能がありますか?

  3. kzalloc からの memset での Linux カーネルの NULL ポインター逆参照

  1. Mac のコマンドラインは Linux と比べてどうですか?

  2. Linux が NVMe ドライブを /dev/sda ではなく /dev/nvme0 としてリストするのはなぜですか?

  3. 独自の Linux カーネルをコンパイルする利点は何ですか?