我正在尝试在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.
我错过了什么?
祝福
答案 0 :(得分:18)
问题是nettle不会构建libhogweed
,除非你已经观察到了libgmp的dev头文件。不幸的是,来自configure的文档和.configure --help
以及输出没有说明这一点。
与此同时,gnuTLS文档也没有解释这一点(正如你所注意到的,这里的配置输出不是很有帮助)。虽然libgmp被列为pre-req,但由于某些原因libhogweed不是(也许是因为它被认为是nettle的一部分)。配置错误“无法找到-lgmp”的原因是libgmp不存在,但libhogweed.so
也不存在,因为它是nettle的隐藏可选部分。如果你然后安装libgmp-dev并且只运行configure for gnutls,那么你将获得相同的“检查libnettle ...... no”。这应该说的是“检查libhogweed ......不”,但负责conf脚本的人太懒了,不能打破它(我猜一个补丁可以提交)。
换句话说,在构建gnutls之前,需要安装libgmp-dev 然后重建nettle 。
答案 1 :(得分:3)
我安装了nettle-dev
& nettle-bin
并且有效:)
答案 2 :(得分:3)
Gnu TLS配置脚本没有大声说需要pkg-config,如果没有安装pkg-config,甚至可能不会尝试其他软件包。安装pkg-config为我解决了这个问题。
答案 3 :(得分:1)
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。问题已解决。
答案 4 :(得分:0)
在Debian上遇到这个问题一段时间,请尝试安装pkgconf包。
答案 5 :(得分:0)
实际上问题出在配置脚本中,错误地调用了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
答案 6 :(得分:0)
GnuTLS
取决于环境中缺少的nettle
。
nettle
package并安装cd nettle-xxx
./configure
make
sudo make install
ubuntu
系统,则可以从apt
安装sudo apt install nettle-dev nettle-bin