convertir - Crear un binario estáticamente enlazado que use getaddrinfo?
convertir binario a texto c# (3)
He incluido el encabezado netdb.h
, donde se incluye getaddrinfo
, pero gcc emite esta advertencia:
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
¿Cómo puedo compilar estáticamente el archivo que falta?
Soluciones posibles:
Podría ser que a la instalación de glibc le falte el archivo de objeto correspondiente necesario para la compilación estática. Si ese es el caso, crea el archivo de objeto correspondiente y vincúlalo en la compilación.
Pruebe EGLIBC en lugar de glibc.
Recopilé con éxito mi programa con dietlibc, que se compiló sin errores y el binario resultante fue mucho más pequeño que lo que hace glibc.
Creo que ciertas características dependen del cargador dinámico para resolver las cosas en tiempo de ejecución. la vinculación estática ya no es práctica lamentablemente http://people.redhat.com/drepper/no_static_linking.html
Encontré una solución: puedes usar la biblioteca de musl para reemplazar glibc. Para usar musl, puede instalarlo y construir su software usando musl-gcc, o puede usar una distribución de Linux que use musl, por ej. Alpine Linux.
En mi caso, para ahorrar tiempo, elegí Alpine Linux para construir mi programa ( https://github.com/zhanxw/rvtests ), ya que no quiero compilar varios compiladores (gcc, g ++ y gfortran).
glibc usa libnss para admitir un número de proveedores diferentes para servicios de resolución de direcciones. Desafortunadamente, no puede vincular estáticamente libnss, ya que exactamente qué proveedores carga depende de la configuración del sistema local.