web-dev-qa-db-ja.com

致命的なエラー:linux / compiler-gcc7.h:そのようなファイルまたはディレクトリはありません

QCA9377ワイヤレスアダプターを備えたDell Inspiron 5570ラップトップでUbuntu 18.04.2 LTSを実行して、 Atheros CSIツール (提供されているインストール手順 こちら )をインストールしようとしています。

インストール手順の「カーネルをコンパイルする」の「準備」セクションにリストされているすべてを正常に実行できます。 (makegccのインストールなど、私が理解できた手順で指定されていないものがあります。)しかし、make menuconfigステップについて混乱しています以降。 Atheros-CSI-Toolフォルダーにmake menuconfigと入力したら、すぐに[保存]を押し、.configという名前のファイルを保存してから、メニューを[終了]します。

make -j16(8 CPUコア)と入力すると、出力は次のようになります。

  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CC      scripts/mod/empty.o
  CC      scripts/mod/devicetable-offsets.s
cc1: error: code model kernel does not support PIC mode
cc1: error: code model kernel does not support PIC mode
scripts/Makefile.build:258: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 1
make[2]: *** Waiting for unfinished jobs....
scripts/Makefile.build:153: recipe for target 'scripts/mod/devicetable-offsets.s' failed
make[2]: *** [scripts/mod/devicetable-offsets.s] Error 1
scripts/Makefile.build:403: recipe for target 'scripts/mod' failed
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....
Makefile:555: recipe for target 'scripts' failed
make: *** [scripts] Error 2
make: *** Waiting for unfinished jobs....
make: *** wait: No child processes.  Stop.

次にmake modulesと入力すると、出力は次のようになります。

  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      Arch/x86/purgatory/purgatory.o
In file included from include/linux/compiler.h:54:0,
                 from include/uapi/linux/stddef.h:1,
                 from include/linux/stddef.h:4,
                 from ./include/uapi/linux/posix_types.h:4,
                 from include/uapi/linux/types.h:13,
                 from include/linux/types.h:5,
                 from Arch/x86/purgatory/sha256.h:14,
                 from Arch/x86/purgatory/purgatory.c:13:
include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h: No such file or directory
 #include gcc_header(__GNUC__)
 ^~~~
compilation terminated.
scripts/Makefile.build:258: recipe for target 'Arch/x86/purgatory/purgatory.o' failed
make[1]: *** [Arch/x86/purgatory/purgatory.o] Error 1
Arch/x86/Makefile:185: recipe for target 'archprepare' failed
make: *** [archprepare] Error 2

アーカイブから古いバージョンのUbuntu(14.04)をインストールして発生したこれらのエラーを修正しようとしましたが、そのOSでラップトップでWi-Fiが機能しませんでした(これは、Wi-Fi接続に関するデータを収集しているため重要です)私がインストールしようとしているツールで)。オンラインアーカイブから古いLinuxカーネル(4.1.10)もインストールしましたが、上記と同じエラーが発生しました。

2
asdf60367134

ここに2つの問題があります。

  1. カーネルはコンパイル用のPICモードをサポートしていません。詳細はこの post で追跡できます。 @Joyが指摘したように、現在aptにインストールされているgcc5 +ではデフォルトでPIEが有効になっているため、-fno-pieをgccオプションに追加する必要があります。

    ここで私は this の修正に従っています。クローンしたgitリポジトリの下のMakefileのL774から始まる次の行を追加します。

    # force no-pie for distro compilers that enable pie by default
    KBUILD_CFLAGS += $(call cc-option, -fno-pie)
    KBUILD_CFLAGS += $(call cc-option, -no-pie)
    KBUILD_AFLAGS += $(call cc-option, -fno-pie)
    KBUILD_AFLAGS += $(call cc-option, -no-pie)
    
    # optional, mute warnings on pointers signedness to speed up compilation
    KBUILD_CFLAGS += $(call cc-option, -Wno-pointer-sign)
    
  2. include/linux/compiler-gcc.h:121:1: fatal error: linux/compiler-gcc7.h、これは基本的に、クローンしたgitリポジトリのinclude/linuxフォルダーの下にcompiler-gcc7.hという名前のファイルがないことを示しています。現在、そのフォルダの下にはcompiler-gcc5.hまでしか存在しません。したがって、簡単なアプローチは、デフォルトのコンパイラとしてgcc-5をインストールして一時的に選択することです。以下:

    # install gcc-5
    Sudo apt-get install gcc-5
    
    # use update-alternatives to switch default gcc version
    # register gcc-7
    Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
    Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60
    
    # choose gcc-5 at Prompt
    update-alternatives --config gcc
    
    # now check gcc version, verify is using gcc-5
    gcc -v
    
    ## gcc version 5.5.0 20171010 (Ubuntu 5.5.0-12ubuntu1)
    

libnl-devのインストール方法を記載したインストール手順

Sudo apt-get install libnl-dev

まだlibnl-devは18.04には存在しないようです。使用を検討する

Sudo apt-get install libnl-3-dev

代わりに問題が発生した場合。

最後に、インストール後にgcc-7に戻すことができます。

# choose gcc-7 at Prompt
update-alternatives --config gcc
0
Quar