Подтвердить что ты не робот

Как скомпилировать GnuTLS

Я пытаюсь собрать библиотеку GnuTLS несколько раз на Centos 6.2, но не повезло. Это следующие шаги:

Я загрузил Nettle 2.4

[[email protected] opt]# wget http://www.lysator.liu.se/~nisse/archive/nettle-2.4.tar.gz
[[email protected] nettle-2.4]# tar zxvf nettle-2.4.tar.gz
[[email protected] nettle-2.4]# cd nettle-2.4
[[email protected] 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.

Что мне не хватает?

С наилучшими пожеланиями

4b9b3361

Ответ 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. Проблема исправлена.

Ответ 2

Проблема заключается в том, что крапива не будет создавать libhogweed, если, как вы уже заметили, отсутствуют заголовки dev для libgmp. К сожалению, документы и .configure --help и вывод из configure ничего не говорят об этом.

Между тем, документы gnuTLS также не объясняют это (и, как вы заметили, его вывод конфигурации здесь не очень помогает). Хотя libgmp указан как предрек, по какой-то причине libhogweed нет (возможно, потому, что предполагается, что он является частью крапивы). Причина вашей ошибки конфигурации "не может найти -lgmp" в том, что libgmp отсутствует, но libhogweed.so тоже не будет там, так как это скрытая необязательная часть крапивы. Если вы затем установите libgmp-dev и запустите configure для gnutls, вы получите ту же "проверку на libnettle... no". То, что это должно сказать, это "проверка на libhogweed... no", но тот, кто отвечает за conf script, слишком ленив, чтобы сломать это (я думаю, патч может быть представлен).

Другими словами, вам нужно установить libgmp-dev, а затем перестроить крапиву перед сборкой gnutls.

Ответ 3

Я установил nettle-dev и nettle-bin, и он работает:)

Ответ 4

Конфигурация Gnu TLS script не говорит вслух, что требуется pkg-config, а другой пакет не может быть даже проверен, если pkg-config не установлен. Установка pkg-config исправила проблему для меня.

Ответ 5

Некоторое время была проблема с Debian, попробуйте установить пакет pkgconf.

Ответ 6

На самом деле проблема заключалась в скрипте configure, неправильном вызове pkg-config Похоже, что это связано с различиями версий в файлах автогена. В любом случае я исправил его в скрипте configure.

Они вызывают pkg-config с оператором => но имена libnettle ошибочно. Например, они вызывают $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