如何编译GnuTLS

时间:2012-03-01 00:18:31

标签: c build compilation makefile

我正在尝试在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

我运行命令makemake 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.

我错过了什么?

祝福

7 个答案:

答案 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