ここで何が起こっているのかわかりません。 Linuxカーネルを4.9.xから4.14.xにアップグレードしようとしていますが、次のことが起こります。
In file included from arch/x86/decode.c:26:0:
arch/x86/../../elf.h:22:18: fatal error: gelf.h: No such file or directory
#include <gelf.h>
^
compilation terminated.
mv: cannot stat ‘/usr/src/linux-4.14.51/tools/objtool/arch/x86/.decode.o.tmp’: No such file or directory
make[4]: *** [/usr/src/linux-4.14.51/tools/objtool/arch/x86/decode.o] Error 1
make[3]: *** [arch/x86] Error 2
make[2]: *** [/usr/src/linux-4.14.51/tools/objtool/objtool-in.o] Error 2
make[1]: *** [objtool] Error 2
make: *** [tools/objtool] Error 2
(明らかなことに加えて)ここで何が起こっているのかというアイデアはありますか? " gelf.h
"あなたはすでに私のコンピュータにいる必要がありますか?それともカーネルタールボールにありますか?
私はkernel.orgからバニラ4.14.51をダウンロードしました。私は14年間私自身の(修正されていない)バニラカーネルを首尾よく繰り返しコンパイルしてきましたが、これは新しいものです。
私のコンピュータは、Core2 i5(64ビット)とSlackware 14.1を搭載したDellノートブックです。数年前、デフォルトの3.17.xから4.4.xにアップグレードし、最近は4.9.x(現在4.9.109)にアップグレードしました。
私するlibelfがインストールされました:
me@mylaptop:~$ locate gelf.h
/usr/include/libelf/gelf.h
me@mylaptop:~$ ls /var/log/packages/*elf*
/var/log/packages/libelf-0.8.13-x86_64-2
付録
昨夜4.14.55を試している間、カーネルビルドスクリプトは一般的です/usr/include
。
つまり、私の(実行中の)4.9.xソースツリーの対応するディレクトリは次のことを行います。いいえ.o
ファイルもありません.ko
。明らかに、4.9.xで有効になっていない構成項目は4.14.xで有効になっているようです。
私は作業中の4.9.xにできるだけ近い4.14.xを設定しようとします。いくつかの新しいオプションを知っていますが、通常は中間カーネルバージョン間で設定を同じに保ちたいと思います。
linux-4.14.*/tools/objtool/arch/x86/
つまり、どの設定オプションでヘッダファイルを見たいのかわかりません...どんなアイデアがありますか?
答え1
次のパッケージをインストールする必要があります。
libelf
gelf.h
ヘッダファイルとその他のファイルを提供します。おそらく、コンピュータにインストールしたことがないかもしれません。
答え2
上記は#include
検索ファイルです入ったばかり /usr/include/
そして、あなたのファイルは別の場所にあります/usr/include/libelf/
。これはうまくいきません。
お願いします誰でも:
- シンボリックリンクを作成してください(好み)。
sudo ln -s libelf/gelf.h /usr/include/gelf.h
- ファイルをコピーしてください。
sudo cp -a /usr/include/libelf/gelf.h /usr/include
- 修理には、例えば
#include <libelf/gelf.h>
とにかく、これはSlackwareのパッケージング問題です。インクルードファイルが正しくインストールされていません。