Статическая компиляция wget

Я загрузил исходный код wget и попробовал статическую компиляцию. Это следующие шаги:

./configure LDFLAGS=-static 

В конце показан результат:

  Version: 1.17 Host OS: linux-gnu Install prefix: /usr/local Compiler: gcc CFlags: -I/usr/include/p11-kit-1 -DHAVE_LIBGNUTLS -DNDEBUG LDFlags: -static Libs: -lpcre -lgnutls -lz SSL: gnutls Zlib: yes PSL: no Digest: yes NTLM: auto OPIE: yes Debugging: yes Assertions: no Valgrind: Valgrind testing not enabled Metalink: no GPGME: no 

Затем я использовал make . Это выдает длинный список ошибок. Вот выдержка:

 init.o: In function `home_dir': init.c:(.text+0x2bc): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking host.o: In function `getaddrinfo_with_timeout_callback': host.c:(.text+0x495): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libgnutls.a(gnutls_mpi.o): In function `_gnutls_x509_read_int': (.text+0x6af): undefined reference to `asn1_read_value' /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libgnutls.a(gnutls_mpi.o): In function `_gnutls_x509_read_int': . . (.text+0x1a7a): undefined reference to `pthread_mutex_lock' /usr/lib/gcc/i686-linux-gnu/4.8/libgcc_eh.a(unwind-dw2-fde-dip.o): In function `_Unwind_Find_FDE': (.text+0x1ac9): undefined reference to `pthread_mutex_unlock' collect2: error: ld returned 1 exit status make[3]: *** [wget] Error 1 make[2]: *** [all] Error 2 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2 

Кто-нибудь сталкивался с подобной проблемой? Если да, отправьте решение. заранее спасибо

One Solution collect form web for “Статическая компиляция wget”

Для статической привязки ld не будет выполнять автоматический поиск зависимостей для wget как это магически для общих объектов. Некоторые сценарии пытаются сделать такой список для вас, другие нет. Вы попадаете в последний случай.

Вам нужно самому составить список библиотек и их зависимостей.

Если вы еще не знаете, что такое полный список депов для вашего статического двоичного wget , вам нужно сначала его создать как обычный (общий), а затем получить такой список с помощью ldd /path/to/wget , где /path/to/wget – ваш встроенный двоичный файл wget (он может быть найден внутри исходного дерева, обычно что-то вроде src/wget )

Вам нужно будет получить все статические версии разделяемых библиотек. Они обычно содержатся в пакетах -dev или devel, предоставляемых вашим дистрибутивом.

Каждая библиотека в списке должна быть перегруппирована или добавлена ​​дважды или более раз, потому что ld не пытается искать все статические архивы для определенного символа и ошибок. Итак, ваш libgnutls.a, вероятно, зависит от libtasn1.a для символов asn1_ *. Затем вам нужно добавить это в командную строку: -lgnutls -ltasn1 . Если тогда еще одна библиотека зависит от libtasn1.a, вам нужно добавить ее снова в командную строку ссылки.

Неопределенные символы могут быть разрешены путем поиска в списке символов статической библиотеки с nm /usr/lib/lib.a . Или найти эту библиотеку в определенном каталоге с fgrep -l symbol_name /usr/lib/*.a . Обратите внимание, что такой поиск (с помощью fgrep) покажет обе библиотеки, которые требуют и предоставляют такой символ, поэтому это всего лишь быстрый тест.

Библиотеки могут быть добавлены с помощью LIBS= variable для configure скрипта: LIBS="-lgnutls -ltasn1" .

  • wget не позволяет исключить каталоги
  • инструмент командной строки для одной загрузки торрента (например, wget или curl)
  • Как узнать, успешно ли завершена загрузка wget?
  • Auth через wget работает, но не может перемещаться по веб-странице после него
  • Wget, отменить повторную попытку после сбоя или таймаута
  • Что такое curl-эквивалент этой команды wget?
  • Попытка получить динамическую страницу с wget без успеха
  • Команда Wget, которая возвращает всех веб-страниц на веб-сервере
  • wget несколько файлов PDF из ссылок
  • SSL сертификат отсутствует
  • Предотвращение зависания wget при обнаружении ошибки 500
  • Interesting Posts

    Bourne shell: игнорирование определенных типов stdin

    Почему сеть не остановлена ​​при выключенном / однопользовательском режиме?

    Отображать только определенные параметры в верхнем

    В чем разница между объявлением и набором

    Копирование файла с использованием SSH через туннель с отправкой сертификатов

    Как напечатать строки, содержащие 3 слова

    Понимание имен хостов

    Как написать демона входа?

    Byobu – отправить команду на сеанс byobu tmux из командной строки (или bash / sh)

    Импорт файлов Python из внутренних папок

    Как вы можете писать в файловую систему перед загрузкой с помощью VirtualBox?

    Как проверить с вывода «uname -a», установленная ОС Solaris является openSolaris или нет

    Какое обоснование оболочки bash не предупреждает вас об арифметическом переполнении и т. Д.?

    Настройка ярлыков для Sakura

    Полная система UEFI, Self-скомпилированная + Clover 2 Grub 2, установка Debian kFreeBSD?

    Linux и Unix - лучшая ОС в мире.