2009-06-11 41 views
16

En Linux, descargué un programa fuente y quiero que esté vinculado de forma estática. tener un enorme Makefile allí, me Cómo vincular estáticamente un programa complejo

./configure 
make 

para compilar. prehpes es un poco demasiado general para preguntar, pero ¿cómo puedo hacer que el binario esté estáticamente vinculado? Gracias.

EDITAR: la razón para esto es querer asegurarse de que el archivo binario no tenga dependencias (o al menos las menos posibles), lo que permite ejecutar en cualquier computadora con Linux, incluso una que no tenga conexión a Internet, y Linux no actualizado

+1

¡La vinculación estática se considera dañina! http://people.redhat.com/drepper/no_static_linking.html Lo siento, esta no es una respuesta directa a su pregunta, pero solo quería señalarlo. –

Respuesta

25

más autoconf generada configure guión le permitirá hacer una acumulación estática:

./configure --enable-static 
make 

Si eso no funciona, puede ser capaz de pasar a través de las banderas de engarce en LDFLAGS, así:

./configure LDFLAGS=-static 
+0

Muy buena respuesta, lamentablemente ambos no funcionaron por alguna razón. –

+0

Según tengo entendido, no funcionó porque me faltaron las bibliotecas estáticas para vincular. –

+2

En CentOS, los paquetes que necesita instalar para la vinculación estática son 'glibc-static' para c y' libstdC++ - static' para la vinculación estática de C++. Ver [este post para más información] (https://www.systutorials.com/5217/how-to-statically-link-c-and-c-programs-on-linux-with-gcc/) –

5

Sí, necesita editar el archivo make y agregar el parámetro -static a gcc durante el enlace.

1

Supongo que está utilizando gcc para compilar una serie de c programas, aunque tendrá que buscar en el Makefile para averiguarlo.

Si es así, puede ajustar las líneas de gcc en el archivo MAKE para hacer enlaces estáticos, aunque dependiendo de la estructura del programa, esto puede ser un cambio complejo. Echa un vistazo a man gcc para ver cómo se hace esto.

Me gustaría saber por qué estás enlazando estáticamente. ¿Has considerado usar prelinking en su lugar?

Debe tener en cuenta que puede haber problemas de licencia para hacer esto si todos los componentes no son GPL.

2

Si no puede compilar un binario estático, he tenido buenos resultados usando Statifier.

+0

Excelente idea. obtuve muy buenos resultados con un producto similar. –

Cuestiones relacionadas