Crea un binario collegato staticamente che usi getaddrinfo?

Ho incluso l’intestazione netdb.h , dove è incluso getaddrinfo , ma gcc emette questo avviso:

 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 

Come posso compilare staticamente qualunque file manchi?

Possibili soluzioni:

  1. Potrebbe essere che nell’installazione di glibc manchi il corrispondente file object necessario per la compilazione statica. In tal caso, creare il file object corrispondente e collegarlo alla compilazione.

  2. Prova EGLIBC invece di glibc.

  3. Ho compilato con successo il mio programma con dietlibc che è stato compilato senza errori più il binario risultante era molto più piccolo di quello che glibc fa.

glibc usa libnss per supportare un numero di provider diversi per i servizi di risoluzione degli indirizzi. Sfortunatamente, non puoi colbind staticamente libnss, esattamente come i provider che carica dipende dalla configurazione del sistema locale.

Ho trovato una soluzione: puoi usare la libreria musl per sostituire glibc. Per usare musl, puoi installarlo e creare il tuo software usando musl-gcc, oppure puoi usare una distribuzione Linux che usa musl, ad esempio Alpine Linux.

Nel mio caso, per risparmiare tempo, ho scelto Alpine Linux per creare il mio programma ( https://github.com/zhanxw/rvtests ), dato che non voglio creare più compilatori (gcc, g ++ e gfortran).

Penso che alcune funzionalità dipendono dal caricatore dinamico per risolvere le cose in fase di esecuzione. il collegamento statico non è più pratico purtroppo http://people.redhat.com/drepper/no_static_linking.html