c++ - ejecutar - Compilar un ejecutable estático independiente
gcc compiler linux (2)
Usa las siguientes banderas para enlazar
-static -static-libgcc -static-libstdc++
Use estos tres indicadores para enlazar contra las versiones estáticas de todas las dependencias (asumiendo gcc). Tenga en cuenta que, en ciertas situaciones, no necesariamente necesita las tres banderas, pero tampoco "lastiman". Por lo tanto, sólo encienda los tres.
Compruebe si realmente funcionó
Asegúrate de que realmente no hay un enlace dinámico
ldd yourexecutable
Debería devolver "no un ejecutable dinámico" o algo equivalente.
Asegúrese de que no queden símbolos sin resolver
nm yourexecutable | grep " U "
La lista debe estar vacía o debe contener solo algunos símbolos especiales del espacio del kernel como
U __tls_get_addr
Por último, comprueba si puedes ejecutar tu ejecutable.
Estoy intentando compilar un archivo ejecutable (archivo ELF) que no usa un cargador dinámico. Construí un compilador cruzado que compila mips desde linux para ser usado en un simulador que hice. Afirmé la bandera -static-libgcc en la compilación de mi archivo hello.cpp (programa hello world). Sin embargo, aparentemente esto no es suficiente. Porque todavía hay un segmento en mi ejecutable que contiene el nombre / ruta del cargador dinámico. ¿Qué indicadores utilizo para generar un ejecutable que contenga TODO lo que se necesita para ejecutar? ¿Necesito reconstruir mi compilador cruzado?
Intenta usar la bandera -static
?