Linux カーネルは gcc でコンパイルするように書かれており、小規模で醜い gcc ハックを多数使用しています。gcc 以外の Linux カーネルをコンパイルできるコンパイラはどれですか?
できるのは、Intel Compiler です。カーネルのコンパイルに必要な最小バージョンは?
Tiny C コンパイラもありましたが、縮小され特別に編集されたバージョンのカーネルしかコンパイルできませんでした。
カーネルを構築できる他のコンパイラはありますか?
Linux カーネルは gcc でコンパイルするように書かれており、小規模で醜い gcc ハックを多数使用しています。gcc 以外の Linux カーネルをコンパイルできるコンパイラはどれですか?
できるのは、Intel Compiler です。カーネルのコンパイルに必要な最小バージョンは?
Tiny C コンパイラもありましたが、縮小され特別に編集されたバージョンのカーネルしかコンパイルできませんでした。
カーネルを構築できる他のコンパイラはありますか?
古い情報: インテル CC を使用してコンパイルするには、カーネルにパッチを適用する必要があります。 インテル® コンパイラー用の Linux カーネル・パッチをダウンロードしてください。
詳細なリンクと情報については、Linux カーネルを gcc 以外のものでコンパイルすることは可能ですか?も参照してください。
最新の情報源: http://forums.fedoraforum.org/showthread.php?p=1328718
LLVMLinux パッチをバニラ カーネルにコミットするプロセスが進行中です (2013-2014)。
LLVMLinux は The Linux Foundation によるプロジェクトです: http://llvm.linuxfoundation.org/は、バニラ カーネルを LLVM で構築できるようにします。LLVMLinux プロジェクトのリーダーである Behan Webster によって、多くのパッチが用意されています。
2013 年 5 月のプロジェクトに関する LWN の記事があり ます https://lwn.net/Articles/549203/ "LFCS: The LLVMLinux project"
LLVMLinux プロジェクトの現在のステータスは、ページhttp://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issuesで追跡されています。
struct S { int array[N];}
すでにカーネルから削除されたもの (基本的struct S { int array[N]; int array_usb_gadget[M]; }
にgcc-isms):関数の引数 * ネストされた関数 (GCC/Gnat 開発者によって C に移植された Ada 機能。C99 では許可されていません) * 特別なセグメントやマクロなどの gcc/gas マジック
やるべきこと: * ビルトインを使用__builtin_constant_p
して恐ろしい魔法を実装するBUILD_BUG_ON(!__builtin_constant_p(offset));
LLVMLinux に関する良いニュースは、そのパッチの後、カーネルが LLVM+clang でビルド可能になるだけでなく、他の非 GCC コンパイラでビルドするのも簡単になることです。 netfilter ハッカー、および暗号サブシステム ハッカーによるもの。ネストされた関数も殺されます。
つまり、カーネルコードは gcc のコンパイラセマンティクスを利用するように書かれているため、できません...そしてカーネルとコンパイルされたコードの間の関係は非常に強いものです。つまり、gcc でコンパイルする必要があります... gcc は「ELF」(Embedded Linking Format) オブジェクト ファイルを使用するため、カーネルはオブジェクト コード形式を使用して構築する必要があります。別のコンパイラで動作するようにハックできない限り、コンパイルは成功するかもしれませんが、動作しない可能性があります。Windows のコンパイラは PE コードを生成するため、カーネルがまったく起動しないという予期しない結果が生じる可能性があります。