web-dev-qa-db-ja.com

GnuTLSをコンパイルする方法

Centos 6.2でGnuTLSライブラリを何度かコンパイルしようとしていますが、うまくいきません。これらはステップです:

Nettle 2.4をダウンロードしました

[root@localhost opt]# wget http://www.lysator.liu.se/~nisse/archive/nettle-2.4.tar.gz
[root@localhost nettle-2.4]# tar zxvf nettle-2.4.tar.gz
[root@localhost nettle-2.4]# cd nettle-2.4
[root@localhost nettle-2.4]# ./configure --enable-shared --prefix=/usr



  Version:           nettle 2.4
  Host type:         x86_64-unknown-linux-gnu
  ABI:               64
  Assembly files:    x86_64
  Install prefix:    /usr
  Library directory: ${exec_prefix}/lib64
  Compiler:          gcc
  Shared libraries:  yes
  Public key crypto: no

コマンドmakeおよびmake installを実行します

最新のGnuTLSをダウンロードしました

 ./configure --with-libnettle-prefix=/usr

hecking for shared library run path Origin... done
checking whether to use nettle... yes
checking for libnettle... no
configure: error:
  ***
  *** Libnettle 2.4 was not found.

何が欠けていますか?

ご多幸を祈る

19
Peter Penzov
configure:8798: checking for libnettle
configure:8820: gcc -std=gnu99 -o conftest -g -O2   conftest.c  /usr/lib/libnettle.so /usr/lib/libhogweed.so -lgmp >&5
/usr/bin/ld: cannot find -lgmp
collect2: ld returned 1 exit status
configure:8820: $? = 1
configure: failed program was:
configure:8830: result: no
configure:8856: error: 
  ***
  *** Libnettle 2.4 was not found.

Gmp-develをインストールします。問題は修正されました。

0
Peter Penzov

問題は、あなたが観察したように、libgmpのdevヘッダーが存在しない限り、イラクサはlibhogweedを構築しないことです。残念ながら、ドキュメントと.configure --helpおよびconfigureからの出力は、これについて何も言いません。

一方、gnuTLSのドキュメントではこれについても説明されていません(また、お気づきのとおり、ここでの構成の出力はあまり役に立ちません)。 libgmpは前提条件としてリストされていますが、何らかの理由でlibhogweedはそうではありません(おそらくイラクサの一部であると想定されているため)。構成エラー「-lgmpが見つかりません」の理由は、libgmpが存在しないためですが、libhogweed.soは非表示であるため、そこにも存在しませんオプションイラクサの一部。次にlibgmp-devをインストールし、gnutlsに対してconfigureを実行すると、同じ「libnettleのチェック...いいえ」が表示されます。これは「libhogweedをチェックしています...いいえ」ですが、confスクリプトの担当者は誰でも面倒なので分解することはできません(パッチを送信できると思います)。

言い換えれば、gnutlsをビルドする前にlibgmp-dev そして次にnettleを再ビルドするをインストールする必要があります。

インストール済みnettle-devnettle-binと動作します:)

3
MarkWong

GNU TLS構成スクリプトは、pkg-configが必要であることを大声で伝えません。また、pkg-configがインストールされていない場合、他のパッケージも試行されない場合があります。 pkg-configをインストールすると問題が解決しました。

3
Mohammad Azim

実際に問題はconfigureスクリプトにあり、pkg-configを誤って呼び出していました。autogenファイルのバージョンの違いが原因であるようです。とにかく、configureスクリプトで修正しました。

pkg-config演算子を使用して=>を呼び出しますが、libnettleはitelfに誤った名前を付けます。たとえば、$PKG_CONFIG --libs "nettle >= 3.4.1" 2>/dev/nullを呼び出します

修正: "=> 3.4.1"部分文字列と出来上がりを削除しました:

    if test -n "$NETTLE_CFLAGS"; then
    pkg_cv_NETTLE_CFLAGS="$NETTLE_CFLAGS"
 Elif test -n "$PKG_CONFIG"; then
    if test -n "$PKG_CONFIG" && \
    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nettle\""; } >&5
  ($PKG_CONFIG --exists --print-errors "nettle") 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; then
  pkg_cv_NETTLE_CFLAGS=`$PKG_CONFIG --cflags "nettle" 2>/dev/null`
              test "x$?" != "x0" && pkg_failed=yes

cFLAGSの場合は以下、LIBSフラグの場合は下に:

if test -n "$NETTLE_LIBS"; then
    pkg_cv_NETTLE_LIBS="$NETTLE_LIBS"
 Elif test -n "$PKG_CONFIG"; then
    if test -n "$PKG_CONFIG" && \
    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nettle\""; } >&5
  ($PKG_CONFIG --exists --print-errors "nettle") 2>&5
  ac_status=$?
  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
  test $ac_status = 0; }; then
  pkg_cv_NETTLE_LIBS=`$PKG_CONFIG --libs "nettle" 2>/dev/null`
              test "x$?" != "x0" && pkg_failed=yes
else
  pkg_failed=yes
fi
 else
    pkg_failed=untried
fi
1
barney

GnuTLSは、環境にないnettleに依存します。

  • nettlepackage をダウンロードしてインストールできます
cd nettle-xxx
./configure 
make 
Sudo make install
  • または、ubuntuシステムの場合、aptからインストールできます
Sudo apt install nettle-dev nettle-bin
0
rashok

Debianでしばらくこの問題が発生した場合は、pkgconfパッケージをインストールしてみてください。

0
user5111079