もちろん、最初の質問は私がなぜこれをやっているのかということです。楽しさで!私はLinuxカーネルについてもっと学んでおり、15分で交換できる仮想マシンがあります。
私は家に近づいて何をすべきかわからず、makefileを編集してみました(学習しようとしました)。したがって、ubuntu-raring/Makefile
デフォルトのmakeファイルであるパスのmakefileから始めます。このリンクは次のリンクにあります。
そこで私はgcc
それぞれをicc
、それぞれg++
をicpc
、それぞれ-O2
をに変更しました-O3
。結果は次のとおりです。
また、このウェブサイトの指示に従いました。
https://help.ubuntu.com/community/Kernel/Compile
gcc
ところで、最終的に/g++
代わりに/を使用してicc
発生したような奇妙なエラーに遭遇しましたicpc
。たとえば、ubuntu-raring/include/linux/compiler-gcc.h
ファイルが最初にあってはならない特定のマクロが定義されているファイルでエラーが発生しました。これを含むマクロは次のファイルにありますubuntu-raring/include/linux/compiler.h
。
#ifdef __GNUC__
#include <linux/compiler-gcc.h>
#endif
/* Intel compiler defines __GNUC__. So we will overwrite implementations
* coming from above header files here
*/
#ifdef __INTEL_COMPILER
# include <linux/compiler-intel.h>
#endif
Intelがヘッダーの上に書いたコメントを理解していませんが(奇妙に聞こえます...実装を定義してからオーバーライドするのはなぜですか?C ++ではそのようなことをしたことはありません!)、ヘッダーの埋め込みを手動で削除するとgcc
問題は解決しました。それ以外の場合は質問が発生します。そして、彼らが関係しているかどうかはわかりません。
だから今私は混乱しています!私は何が間違っていましたか?gcc
他のコンパイラを使用するだけにMakefileのすべての合計を変更していますか?g++
それとも、私が見落としている他のものの中で変更する必要がありますか?
あらゆる努力に感謝します。
答え1
First learn to walk, then learn to fly.
学びたいなら読んでください。読んでみました...このユーザーガイドは、Intel C コンパイラを使用してカーネルを構築するために使用されます。?このマニュアルはicc
選択に異なるアプローチを使用しているため、これは反理論的な質問ですgcc
。
3つのことを同時に行います。
- Ubuntuの世界に合わせていくつかの採用とパッチ付きカーネルを使用します(例:gcc)。
-O2
からまで最適化してください-O3
。- コンパイラの変更
デフォルトのLinuxカーネルで始めるkernel.org。すべてを標準に保ち、お使いのコンピュータに適したカーネルを構築する方法を見つけてください。コンピュータに必要なドライバのみを含むカーネルをビルドします。独自のカーネルでコンパイルして起動できるようになったら、ビルド環境の変更を開始できます。
from -O2
toは-O3
おそらく決して機能しません。-O3
まるでパンドラの箱を開けるのと同じです。有効にするのが簡単であれば、デフォルトになることも-O3
できます!