¿Hay un conjunto de opciones de línea de comandos que convencerán a gcc para producir un archivo binario plano a partir de un archivo fuente autónomo? Por ejemplo, supongamos que el contenido de foo. c no es ninguna referencia externa, nada que exportar al vinculador. Me gustaría obtener un pequeño archivo con sólo las instrucciones de la máquina para esta función, sin ninguna otra decoración. Tipo de como un archivo (DOS) excepto el modo protegido de 32 bits. Las otras respuestas son definitivamente el camino a seguir. Sin embargo, tuve que especificar argumentos adicionales de la línea de comando a objcopy para que mi salida fuera como esperado. Tenga en cuenta que estoy desarrollando código de 32 bits en una máquina de 64 bits, de ahí el argumento - m32. Además, me gusta la sintaxis de montaje de Intel mejor, así que usted verá que en los argumentos también. Ok, Heres donde tuve que especificar que yo específicamente sólo quería la sección de. text: Me tomó alrededor de 2 horas de lectura y probar diferentes opciones antes de que me di cuenta de esto. Espero que esto salve a alguien más ese tiempo. Puede pasar opciones al vinculador directamente con - Wl, ltlinker optiongt La documentación pertinente se copia a continuación de la opción man gcc - Wl, opción Pass como una opción para el vinculador. Si la opción contiene comas, se divide en varias opciones en las comas. Puede utilizar esta sintaxis para pasar un argumento a la opción. Por ejemplo, - Wl, - Map, output. map pasa - Mapa output. map al vinculador. Al usar el vinculador GNU, también puede obtener el mismo efecto con - Wl, - Mapoutput. map. Así que al compilar con gcc si pasas - Wl, - oformatbinary generará un archivo binario en lugar del formato elf. Donde --oformatbinary indica a ld que genere un archivo binario. Esto elimina la necesidad de objcopy por separado. Tenga en cuenta que --oformatbinary puede expresarse como OUTPUTFORMAT (binario) desde dentro de un script de vinculador. Si quieres lidiar con binarios planos, hay una gran posibilidad de que te beneficiarías del alto nivel de control que proporcionan los scripts de vinculador. Respondió el 6 de mayo a las 18:40 La colección del compilador GNU. Comúnmente abreviado GCC. Es una suite de compilador portátil con soporte para una amplia selección de lenguajes de programación. Red Hat Developer Toolset se distribuye con GCC 4.7.2. Esta versión es más reciente que la versión incluida en Red Hat Enterprise Linux y proporciona numerosas correcciones de errores y mejoras, incluida la optimización de varios nuevos procesadores Intel y AMD, compatibilidad con OpenMP 3.1 y optimización de vínculos. Esta versión también incluye soporte experimental para el estándar C11, los tipos atómicos C11 y la memoria transaccional. Para obtener una lista detallada de los cambios, consulte la Sección B.1, Cambios en GCC 4.7.2. 2.1. Compilador GNU C 2.1.1. Instalación del compilador C En el paquete de herramientas para desarrolladores de Red Hat, el compilador C de GNU es proporcionado por el paquete devtoolset-1.1-gcc, y se instala automáticamente con devtoolset-1.1 como se describe en la Sección 1.5, Instalación de Red Hat Developer Toolset. 2.1.2. Uso del compilador C Para compilar un programa C en la línea de comandos, ejecute el compilador gcc de la siguiente manera: Esto crea un archivo binario denominado outputfile en el directorio de trabajo actual. Si se omite la opción - o, el compilador crea un archivo denominado a. out de forma predeterminada. Cuando está trabajando en un proyecto que consta de varios archivos de origen, es común compilar primero un archivo de objeto para cada uno de los archivos de origen y vincular estos archivos de objeto juntos. De esta manera, al cambiar un solo archivo de origen, puede recompilar sólo este archivo sin tener que compilar todo el proyecto. Para compilar un archivo de objeto en la línea de comandos, ejecute el siguiente comando: Esto crea un archivo de objeto denominado objectfile. Si se omite la opción - o, el compilador crea un archivo con el nombre del archivo de origen con la extensión de archivo. o. Para vincular archivos de objetos y crear un archivo binario, ejecute: Tenga en cuenta que puede ejecutar cualquier comando utilizando la utilidad scl, haciendo que se ejecute con los binarios de Red Hat Developer Toolset usados en lugar del equivalente al sistema Red Hat Enterprise Linux. Esto le permite ejecutar una sesión de shell con Red Hat Developer Toolset gcc como valor predeterminado: Para verificar la versión de gcc que está utilizando en cualquier momento, escriba lo siguiente en el intérprete de comandos de shell: . Como alternativa, puede utilizar el siguiente comando para confirmar que el número de versión coincida con el de Red Hat Developer Toolset gcc. Algunas nuevas características de la biblioteca están vinculadas estáticamente a las aplicaciones creadas con Red Hat Developer Toolset para soportar la ejecución en varias versiones de Red Hat Enterprise Linux. Esto agrega un pequeño riesgo de seguridad adicional ya que las erratas de Red Hat Enterprise Linux normales no cambiarían este código. Si surge la necesidad de que los desarrolladores reconstruyan sus aplicaciones debido a un problema de este tipo, Red Hat señalará esto a través de una errata de seguridad. Se recomienda encarecidamente a los desarrolladores que no enlazen estáticamente su aplicación entera por las mismas razones. Ejemplo 2.1. Compilación de un programa C en la línea de comandos Imagine que tiene un archivo de origen denominado hello. c con los siguientes contenidos: Para compilar este código fuente en la línea de comandos mediante el compilador gcc de Red Hat Developer Toolset, escriba: Archivo binario llamado hello en el directorio de trabajo actual. 2.1.3. Ejecución de un programa C Cuando gcc compila un programa, crea un archivo binario ejecutable. Para ejecutar este programa en la línea de comandos, cambie al directorio con el archivo ejecutable y escriba: Ejemplo 2.2. Ejecución de un programa C en la línea de comandos Suponiendo que ha compilado satisfactoriamente el archivo binario hello, como se muestra en el ejemplo 2.1, Compilación de un programa C en la línea de comandos. Puede ejecutarlo escribiendo lo siguiente en un indicador de shell: GCC, la colección del compilador de GNU La colección del compilador de GNU incluye front ends para C. C. Objective-C, Fortran. Java. Ada y Go, así como bibliotecas para estos idiomas (libstdc, libgcj.). GCC fue escrito originalmente como el compilador para el sistema operativo GNU. El sistema GNU fue desarrollado para ser 100 software libre, libre en el sentido de que respeta la libertad de los usuarios. Nos esforzamos por proporcionar lanzamientos regulares y de alta calidad. Que queremos trabajar bien en una variedad de objetivos nativos y cruzados (incluyendo GNU / Linux), y animar a todos a contribuir con cambios o ayudar a probar GCC. Nuestras fuentes están fácilmente y libremente disponibles vía SVN y instantáneas semanales. El comité directivo toma decisiones importantes sobre CCG. Guiado por la declaración de misión. Noticias GCC 6.2 lanzado 2016-08-22 GCC 4.9.4 publicado 2016-08-03 GCC 5.4 lanzado 2016-06-03 2015 ACM Software System Award 2016-04-29 GCC 6.1 lanzado 2016-04-27 Soporte de arquitectura de sistemas heterogéneos 2016 -01-27 Se agregó soporte de arquitectura de sistemas heterogéneos 1.0 a GCC. Contribuido por Martin Jambor, Martin Lika y Michael Matz de SUSE. GCC 5.3 publicado 2015-12-04 GCC 5.2 publicado 2015-07-16 GCC 4.9.3 publicado 2015-06-26 GCC 4.8.5 publicado 2015-06-23 GCC 5.1 publicado 2015-04-22 Soporte de arquitectura MIPS Release 6 2015 -01-20 Soporte para MIPS Release 6 (r6) ha sido aportado por Imagination Technologies. Soporte de descarga de OpenMP 4.0 en GCC 2015-01-14 Se añadió soporte de descarga de OpenMP 4.0 a GCC. Contribución de Jakub Jelinek (Red Hat), Bernd Schmidt y Thomas Schwinge (CodeSourcery), Andrey Turetskiy, Ilya Verbin y Kirill Yukhin (Intel). Versiones compatibles
No comments:
Post a Comment