gcc

  • Este artículo explica cómo correr una aplicación de 32 bit (Intel i386) en un sistema Debian de 64 bit (Intel x86-64, o "amd64" según la nomenclatura que utiliza Debian).

  • Al tratar de compilar con gcc un programa en lenguaje C me encontré con este error.

  • Cuando se compila un fuente con gcc, éste genera muchos símbolos de debug. Se trata de información acerca de qué porción de código en lenguaje de alto nivel (en este caso C) implementa qué sección de código máquina en el binario ELF. Los símbolos además identifican dónde (en qué dirección) se ubican las diferentes funciones y variables del programa, a través de una tabla, la cual es utilizada por el linker para relocar el código cuando se enlaza junto con otros archivos objeto.

    Los símbolos aumentan considerablemente el tamaño de los binarios, pues agregan gran cantidad de información que no es código ejecutable, sino que es meta-información acerca del código binario, a ser interpretada eventualmente por el debugger y/o linker. Sin embargo, cuando compilamos un ejecutable para correr en un sistema en producción, difícilmente necesitemos recurrir al debugger (tarea más común en un desarrollador, mantenedor, auditor, investigador o experto en seguridad informática) o al linker (para enlazado del ejecutable). Por lo cual, eliminando los símbolos reduciremos el tamaño final del archivo ejecutable. Sin embargo, los símbolos no aumentan el consumo de memoria, pues no son cargados por el sistema operativo al lanzar un programa, ya que se encuentran en secciones de memoria non-allocable que no son necesarias para la ejecución del programa (sólo se cargan en memoria las secciones allocable).