¿Crear un binario enlazado estáticamente que use getaddrinfo?
He incluido el encabezado netdb.h
, donde getaddrinfo
está incluido, 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 cualquier archivo que falte ?
Posibles soluciones:
Puede ser que a la instalación de glibc le falte el archivo objeto correspondiente necesario para la compilación estática. Si ese es el caso, crea el archivo objeto correspondiente y enlázalo en la compilación.
Pruebe EGLIBC en lugar de glibc.
Compilé con éxito mi programa con dietlibc que compiló sin ningún error más el binario resultante era mucho más pequeño que lo que hace glibc.
3 answers
Glibc utiliza libnss para admitir varios proveedores diferentes de 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-21 17:48:51
Encontré una solución: puede usar la biblioteca musl para reemplazar glibc. Para usar musl, puede instalarlo y compilar su software usando musl-gcc, o puede usar una distribución Linux que use musl, por ejemplo 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).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-16 01:56:33
Creo que ciertas características dependen del cargador dinámico para resolver las cosas en tiempo de ejecución. el enlace estático ya no es práctico desafortunadamente http://people.redhat.com/drepper/no_static_linking.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-27 21:40:04