新しいgccで古いカーネルをコンパイルする

新しいgccで古いカーネルをコンパイルする

私のLinuxシステムでは、現在gcc-6.3を使用して以前のバージョンのLinux(3.4)をコンパイルしようとしています。ただし、make コマンドを実行すると、次のエラーが表示されます。

scripts/kconfig/conf.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC

そしてまだ解決策が見つかりませんでした。 gcc には、一部のオブジェクトに対して fPIC フラグが必要なように見えます。これは3.4カーネルプロファイルでは必要ありません。可能であれば、カーネルのデフォルトに触れたくありません。このフラグ要求を停止または無効にするようにgccにどのように要求する必要がありますか?

答え1

私の考えでは、あなたが使用しているgccバージョンがデフォルトでPIE(Position Independent Executable)を生成するように修正されているようです。これによるとページ少なくともUbuntuはこのような移行を遂げました。このディレクトリのコードは、scripts/kconfigカーネルにリンクされておらず(私が知っている限り)、外部静的ライブラリにリンクされていないヘルパープログラム用です。したがって、デフォルト値が何であるかは重要ではありません。〜しない限りデフォルトが異なるコンパイラバージョンを最後に実行したときに残りの部分があります。実行しmake cleanて再コンパイルします。

役に立たない場合は確認してください。ファイルの生成現在のカーネルの場合、これは-no-pie

答え2

どのエラーを解決しても、次のコンパイル試行では新しいエラーが表示されます。残念ながら、私が見つけた最高の解決策は、古いgccを使ってこのカーネルをコンパイルすることです。

関連情報