Linuxカーネル4.7-rc2をコンパイルできません。

Linuxカーネル4.7-rc2をコンパイルできません。

ソースからLinuxカーネルをコンパイルしようとしています。以前カーネルをコンパイルしていましたが、エラーは発生しませんでした。ところで今回はエラーが発生しました。エラーは次のとおりです。

   CHK     include/generated/asm-offsets.h
   CALL    scripts/checksyscalls.sh
   HOSTCC  scripts/sign-file
  /tmp/cczyW3hq.o: In function `main':
  sign-file.c:(.text.startup+0x52): undefined reference to `OPENSSL_init_crypto'
  sign-file.c:(.text.startup+0x5e): undefined reference to `OPENSSL_init_crypto'
  sign-file.c:(.text.startup+0x247): undefined reference to `OPENSSL_init_crypto'
  collect2: error: ld returned 1 exit status
  scripts/Makefile.host:91: recipe for target 'scripts/sign-file' failed
  make[1]: [scripts/sign-file] Error 1

scripts/sign-file.cを確認すると、というコメントが表示されますSign a module file using the given key.。それで私はずっと始めて行きましmake menuconfigModule signature verification。そして再コンパイルしてみてください。これで、以前のエラーは削除されましたが、上記と同じですが、他のファイルに新しいエラーが表示されます。これはエラーです。

  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  HOSTCC  scripts/extract-cert
  /tmp/ccA63AAC.o: In function `main':
  extract-cert.c:(.text.startup+0x25): undefined reference to `OPENSSL_init_crypto'
  extract-cert.c:(.text.startup+0x31): undefined reference to `OPENSSL_init_crypto'
  collect2: error: ld returned 1 exit status
  scripts/Makefile.host:91: recipe for target 'scripts/extract-cert' failed
  make[1]: *** [scripts/extract-cert] Error 1
  Makefile:556: recipe for target 'scripts' failed
  make: *** [scripts] Error 2

libsslもしそうなら、この問題が設定エラーによるものかどうか疑問に思います。Ubuntu 16.04LTSと一緒に使用していますgcc-5.3.1

編集:libssl-devの再インストールを試み、ソースからopensslをコンパイルし、インストールも試みました。/boot/config-4.4.0-22-genericソースディレクトリの設定ファイルを 。

更新:make scripts V=1出力は次のとおりです。

make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.asm-generic \
        src=asm obj=arch/x86/include/generated/asm
make -f ./scripts/Makefile.asm-generic \
        src=uapi/asm obj=arch/x86/include/generated/uapi/asm
make -f ./scripts/Makefile.build obj=scripts
make -f ./scripts/Makefile.build obj=scripts/gdb
make -f ./scripts/Makefile.build obj=scripts/gdb/linux
make -f ./scripts/Makefile.build obj=scripts/genksyms
make -f ./scripts/Makefile.build obj=scripts/mod
make -f ./scripts/Makefile.build obj=scripts/selinux
make -f ./scripts/Makefile.build obj=scripts/selinux/genheaders
make -f ./scripts/Makefile.build obj=scripts/selinux/mdp
  gcc -Wp,-MD,scripts/.sign-file.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89   -I./tools/include  -o scripts/sign-file scripts/sign-file.c  -lcrypto
/tmp/cc7o2Y1C.o: In function `main':
sign-file.c:(.text.startup+0x52): undefined reference to `OPENSSL_init_crypto'
sign-file.c:(.text.startup+0x5e): undefined reference to `OPENSSL_init_crypto'
sign-file.c:(.text.startup+0x247): undefined reference to `OPENSSL_init_crypto'
collect2: error: ld returned 1 exit status
scripts/Makefile.host:91: recipe for target 'scripts/sign-file' failed
make[1]: *** [scripts/sign-file] Error 1
Makefile:556: recipe for target 'scripts' failed
make: *** [scripts] Error 2

答え1

カーネルモジュールの署名を有効にしたので、カーネルのコンパイルプロセスでもツールの作成を試みますsign-file。これにはOpenSSLライブラリが必要です。

より具体的に言えば、OpenSSLが必要なすべてをコンパイルするということは、次のことを意味します。開発キットまず、OpenSSLをインストールします(ディストリビューションに応じて通常openssl-devまたは)。openssl-devel

答え2

libsslとlibcryptoへのシンボリックリンクが更新されていることを確認する必要があります。以下を行う必要があります。すべてのlibssl.soとlibcrypto.soを検索します。

それぞれに正しいバージョンのlibsslに接続されていることを確認してください。あなたの場合はlibssl.so.1.1です(libssl.so.1.1が必要です)。

以前のバージョンをターゲットにしている場合は、リンクを削除して新しいバージョンを作成してください。

ln -s libssl.so.1.1 libssl.so

libcrytpoも同様です。

すべてのlibssl.soを検索してください(コードがどこから取得されるのかわからない)。

答え3

APIのない古いバージョンのopensslを使用してくださいOPENSSL_init_crypto

  1. openssl/crypto.h/usr/includeまたは、opensslヘッダーファイルを見つけて、ヘッダーファイルにAPIプロトタイプがあることを/usr/local/include確認します(以下のようにgrepを使用できます)。OPENSSL_init_crypto
grep OPENSSL_init_crypto /usr/include -R
grep OPENSSL_init_crypto /usr/local/include -R

上記の2つのgrepコマンドで結果が出ない場合は、opensslがインストールされていないか、以前のopensslバージョンがインストールされていることを意味します。

  1. したがって、以下から最新のopenssl-1.1.1をダウンロードしてください。ここ 次のコマンドを使用してインストールします。
tar -xvf <openssl_tar_package>
./config
make
make install

関連情報