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.
何が欠けていますか?
ご多幸を祈る
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をインストールします。問題は修正されました。
問題は、あなたが観察したように、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-dev
&nettle-bin
と動作します:)
GNU TLS構成スクリプトは、pkg-configが必要であることを大声で伝えません。また、pkg-configがインストールされていない場合、他のパッケージも試行されない場合があります。 pkg-configをインストールすると問題が解決しました。
実際に問題は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
GnuTLS
は、環境にないnettle
に依存します。
nettle
package をダウンロードしてインストールできますcd nettle-xxx
./configure
make
Sudo make install
ubuntu
システムの場合、apt
からインストールできますSudo apt install nettle-dev nettle-bin
Debianでしばらくこの問題が発生した場合は、pkgconfパッケージをインストールしてみてください。