Как скомпилировать 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.
Что мне не хватает?
С наилучшими пожеланиями
Ответы
Ответ 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