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

Создать статически связанный двоичный файл, который использует getaddrinfo?

Я включил заголовок netdb.h, где включен getaddrinfo, но gcc выдает это предупреждение:

warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

gcc -m32 -static -s -O2 -std=c99 -D_POSIX_C_SOURCE=200112L myprogram.c

Как я могу статически компилировать любой файл?

Возможные решения:

  • Возможно, в установке glibc отсутствует соответствующий объектный файл, необходимый для статической компиляции. Если это так, создайте соответствующий объектный файл и привяжите его при компиляции.

  • Попробуйте использовать EGLIBC вместо glibc.

  • Я успешно скомпилировал свою программу с помощью dietlibc, которая была скомпилирована без ошибок, а полученный двоичный файл был намного меньше, чем делает glibc.

4b9b3361

Ответ 1

glibc использует libnss для поддержки нескольких разных провайдеров услуг разрешения адресов. К сожалению, вы не можете статически связывать libnss, так как именно то, что он загружает, зависит от локальной конфигурации системы.

Ответ 2

Я нашел решение: вы можете использовать мусличную библиотеку для замены glibc. Чтобы использовать musl, вы можете установить его и создать свое программное обеспечение с помощью musl-gcc, или вы можете использовать дистрибутив Linux, который использует musl, например. Alpine Linux.

В моем случае, чтобы сэкономить время, я выбрал Alpine Linux для сборки моей программы (https://github.com/zhanxw/rvtests), поскольку я не хочу для создания нескольких компиляторов (gcc, g++ и gfortran).

Ответ 3

Я думаю, что некоторые функции зависят от динамического загрузчика, чтобы работать во время выполнения. статическая связь уже не практична, к сожалению http://people.redhat.com/drepper/no_static_linking.html