¿Cómo puedo obtener un compilador C estático?

8

Estoy jugando con entornos chroot, y me gustaría tener un compilador de C portátil para poder configurar fácilmente algunas herramientas de compilación básicas en cada entorno sin tener que mover demasiadas bibliotecas.

Gcc parece bastante hinchado por lo que quiero hacer, pero si es razonablemente fácil construir un gcc estático, no me importaría unas pocas docenas de megabytes.

También estoy mirando el compilador Tiny C, que es más pequeño pero aún parece que tiene un conjunto de características impresionantes. Sin embargo, ejecutar ./configure --help en el directorio fuente no enumera ninguna opción para construir tcc estáticamente, y no estoy seguro de cómo podría hacerse de otra manera.

math4tots
fuente
Para responder a su preocupación secundaria, el uso de memoria, aquí hay algunas soluciones: puede crear directorios secundarios que solo contengan enlaces duros a GCC; Puede usar contenedores docker (los contenedores son más seguros que chroot, y docker proporciona un sistema de archivos de unión, que le permitirá ahorrar memoria).
ctrl-alt-delor

Respuestas:

1

Construir un binario estático debería ser tan simple como ejecutar gcc con -static, o si se llama a ld directamente, use -Bstatic. Tratar

CFLAGS=-static make

después de correr configure. Si falla, los resultados serán obvios, por ejemplo, balsas de referencias indefinidas en el momento del enlace.

Kyle Jones
fuente
1
Lo intenté hace make CFLAGS=-staticun momento. Haga impresiones sobre alguna advertencia dlopen, luego, cuando intento ejecutar el ejecutable en el entorno chroot, /usr/lib/crt1.o .. crti,o .. crtn.ono encuentro errores. ¿Es eso lo que quisiste decir con "referencias indefinidas en el momento del enlace"?
math4tots
Los errores que esperaba se debían a la falta de versiones estáticas de las bibliotecas, como crt1.o, pero el enlazador se quejaría de inmediato. Si está viendo los errores en tiempo de ejecución, entonces el binario no estaba vinculado estáticamente.
Kyle Jones
Creo que entendió mal la pregunta: math4tots quiere un compilador de C que funcione como un binario independiente (o al menos como un conjunto de archivos fácilmente identificable), no un compilador de C que produzca binarios independientes.
Gilles 'SO- deja de ser malvado'
1
Sí, lo entiendo. Producir un compilador enlazado estáticamente es un primer paso necesario, y uno sobre el que la pregunta parece estar preguntando.
Kyle Jones
1
@Gilles La mejor manera de obtener un compilador de C como binario independiente es compilarlo desde la fuente utilizando un compilador que ya tiene.
OrangeDog
3

También puede recuperar una versión precompilada con static-get

static-get -x gcc
Javier López
fuente