2012-06-26 10 views
6
$ printf 'int main(){}' | gcc -static -x c - -o hello 
$ scp hello vi-server.org:./ 
hello        100% 565KB 565.2KB/s 00:00 
$ ssh -t vi-server.org "./hello; uname -r" 
FATAL: kernel too old 
sh: line 1: 15378 Segmentation fault  ./hello 
2.6.18-274.... # can't easily upgrade the kernel 
Connection to vi-server.org closed. 

¿Cómo construir binaria estática que funciona en en sistemas viejos? Espero que los binarios estáticos funcionen incluso en 2.4.¿Cómo construir un binario estático para instalaciones GNU/Linux con kernel antiguo?

Respuesta

0

Gracias a la ecatmur cartel anterior - que en realidad funciona para reconfigurar/glibc reconstruir con la opción de configuración --enable-kernel = versión

me gustaría añadir lo siguiente - se puede utilizar gcc -static -L/ruta/a/local/lib (gran opción L en el directorio) y parece funcionar igual de bien que enlazar con el archivo de la biblioteca. Cuando me vinculé de la última manera (a /path/to/local/lib/libc.a), creó un archivo ejecutable innecesariamente grande.

+2

Nota: a menudo hay una opción para hacer un binario "medio estático". Se vinculará a libc de forma dinámica, pero a otras bibliotecas estáticamente (puede elegir qué bibliotecas incluir en binario y a qué vincular). Se puede hacer editando manualmente el comando de enlace. –

Cuestiones relacionadas