proceso ejecutar compiler compilar compilacion c++ compiler-construction linker executable

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ó

  1. Asegúrate de que realmente no hay un enlace dinámico

    ldd yourexecutable

    Debería devolver "no un ejecutable dinámico" o algo equivalente.

  2. 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

  3. 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 ?