Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo compilar un archivo con gcc? En la terminal, ingrese gcc filename -o target filename \x0d\ y luego ingrese ./target filename \x0d\ y luego ./a. \x0d\\\\x0d\ Cuando utilizamos el compilador GCC, debemos proporcionar una serie de parámetros de llamada y nombres de archivos necesarios. El compilador GCC tiene alrededor de 100 parámetros de llamada, la mayoría de los cuales es posible que no usemos en absoluto, por lo que aquí solo presentamos los parámetros más básicos y comúnmente utilizados. El uso más básico de \GCC es: gcc [opciones] [nombres de archivo]\x0d\ donde opciones son los parámetros requeridos por el compilador y nombres de archivo proporciona el nombre del archivo relevante. \x0d\ -c, solo compila, no se vincula a un archivo ejecutable. El compilador solo genera un archivo objeto con el sufijo .o a partir de la entrada .c y otros archivos de código fuente. Generalmente se usa para compilar subprogramas que no lo hacen. incluir el programa principal. \output_filename determina el nombre del archivo de salida como output_filename y el nombre no puede ser el mismo que el del archivo fuente. Si no se proporciona esta opción, gcc proporcionará el ejecutable predeterminado a.out. \x0d\ -g, genera la información simbólica requerida por la herramienta de depuración simbólica (gdb de GNU). Para depurar el código fuente, debemos incluir esta opción. \x0d\ -O, optimiza la compilación y vinculación del programa. Con esta opción, todo el código fuente se optimizará durante el proceso de compilación y vinculación, de modo que se puede mejorar la eficiencia de ejecución del archivo ejecutable generado, pero la compilación. y la velocidad de enlace también será La respuesta se ralentiza. \x0d\ -O2, optimiza la compilación y la conexión mejor que -O. Por supuesto, todo el proceso de compilación y conexión será más lento. \C El archivo de encabezado en el programa contiene dos situaciones: \x0d\ A)#include \x0d\ B)#include "myinc.h" \x0d\ Entre ellos, la clase A usa corchetes angulares () y la clase B usa doble citas (" "). Para el tipo A, el preprocesador cpp buscará el archivo correspondiente en el directorio de archivos de inclusión preestablecido del sistema (como /usr/include), mientras que para el tipo B, el preprocesador buscará el archivo correspondiente en la carpeta del archivo de destino. . \x0d\\\\\x0d\ Ejemplo de proceso de ejecución de GCC\x0d\x0d\ Código de muestra a.c:\x0d\ #include\x0d\ int main()\x0d\ {x0d\ printf("hola\n");\ x0d\ } Proceso de precompilación: \Este proceso maneja definiciones e incluye macros y verifica la sintaxis. \Puedes ver que después de la precompilación, el código se expandió de 5 líneas a 910 líneas. \gcc -E a.c -o a.i\x0d\ cat a.c | wc -l\x0d\ 5\x0d\ cat a.i | wc -l\x0d\ 910\x0d\ Proceso de compilación: \En esta etapa se genera el código ensamblador. \gcc -S a.i -o a.s\ cat a.s | wc -l\x0d\ 59\x0d\ Proceso de ensamblaje: \En esta etapa, se genera el código objeto. \Este proceso genera el código objeto en formato ELF.\gcc -c a.s -o a.o\ file a.o\ a.o:ELF LSB de 64 bits reubicable, AMD x86-64, versión 1 (SYSV), no eliminado\x0d\ Proceso de vinculación : \Proceso de vinculación Hay dos tipos de vínculos para generar código ejecutable: vínculo estático y vínculo dinámico. La ventaja de utilizar enlaces estáticos es que depende de menos bibliotecas de enlaces dinámicos, no es muy sensible a la versión de la biblioteca de enlaces dinámicos y tiene mejor compatibilidad, la desventaja es que el programa generado es más grande; La ventaja de utilizar enlaces dinámicos es que el programa generado es más pequeño y ocupa menos memoria.

¿Cómo compilar un archivo con gcc? En la terminal, ingrese gcc filename -o target filename \x0d\ y luego ingrese ./target filename \x0d\ y luego ./a. \x0d\\\\x0d\ Cuando utilizamos el compilador GCC, debemos proporcionar una serie de parámetros de llamada y nombres de archivos necesarios. El compilador GCC tiene alrededor de 100 parámetros de llamada, la mayoría de los cuales es posible que no usemos en absoluto, por lo que aquí solo presentamos los parámetros más básicos y comúnmente utilizados. El uso más básico de \GCC es: gcc [opciones] [nombres de archivo]\x0d\ donde opciones son los parámetros requeridos por el compilador y nombres de archivo proporciona el nombre del archivo relevante. \x0d\ -c, solo compila, no se vincula a un archivo ejecutable. El compilador solo genera un archivo objeto con el sufijo .o a partir de la entrada .c y otros archivos de código fuente. Generalmente se usa para compilar subprogramas que no lo hacen. incluir el programa principal. \output_filename determina el nombre del archivo de salida como output_filename y el nombre no puede ser el mismo que el del archivo fuente. Si no se proporciona esta opción, gcc proporcionará el ejecutable predeterminado a.out. \x0d\ -g, genera la información simbólica requerida por la herramienta de depuración simbólica (gdb de GNU). Para depurar el código fuente, debemos incluir esta opción. \x0d\ -O, optimiza la compilación y vinculación del programa. Con esta opción, todo el código fuente se optimizará durante el proceso de compilación y vinculación, de modo que se puede mejorar la eficiencia de ejecución del archivo ejecutable generado, pero la compilación. y la velocidad de enlace también será La respuesta se ralentiza. \x0d\ -O2, optimiza la compilación y la conexión mejor que -O. Por supuesto, todo el proceso de compilación y conexión será más lento. \C El archivo de encabezado en el programa contiene dos situaciones: \x0d\ A)#include \x0d\ B)#include "myinc.h" \x0d\ Entre ellos, la clase A usa corchetes angulares () y la clase B usa doble citas (" "). Para el tipo A, el preprocesador cpp buscará el archivo correspondiente en el directorio de archivos de inclusión preestablecido del sistema (como /usr/include), mientras que para el tipo B, el preprocesador buscará el archivo correspondiente en la carpeta del archivo de destino. . \x0d\\\\\x0d\ Ejemplo de proceso de ejecución de GCC\x0d\x0d\ Código de muestra a.c:\x0d\ #include\x0d\ int main()\x0d\ {x0d\ printf("hola\n");\ x0d\ } Proceso de precompilación: \Este proceso maneja definiciones e incluye macros y verifica la sintaxis. \Puedes ver que después de la precompilación, el código se expandió de 5 líneas a 910 líneas. \gcc -E a.c -o a.i\x0d\ cat a.c | wc -l\x0d\ 5\x0d\ cat a.i | wc -l\x0d\ 910\x0d\ Proceso de compilación: \En esta etapa se genera el código ensamblador. \gcc -S a.i -o a.s\ cat a.s | wc -l\x0d\ 59\x0d\ Proceso de ensamblaje: \En esta etapa, se genera el código objeto. \Este proceso genera el código objeto en formato ELF.\gcc -c a.s -o a.o\ file a.o\ a.o:ELF LSB de 64 bits reubicable, AMD x86-64, versión 1 (SYSV), no eliminado\x0d\ Proceso de vinculación : \Proceso de vinculación Hay dos tipos de vínculos para generar código ejecutable: vínculo estático y vínculo dinámico. La ventaja de utilizar enlaces estáticos es que depende de menos bibliotecas de enlaces dinámicos, no es muy sensible a la versión de la biblioteca de enlaces dinámicos y tiene mejor compatibilidad, la desventaja es que el programa generado es más grande; La ventaja de utilizar enlaces dinámicos es que el programa generado es más pequeño y ocupa menos memoria.

\gcc a.o -o a\x0d\ Ejecución del programa: \x0d\ ./a\ hola\x0d\ Editar esta sección \x0d\ Ejemplo simple de compilación de GCC \x0d\x0d\ Escribe el siguiente código: \Ejecutar de la siguiente manera: \x0d\ gcc -E hola.c -o hola.i\x0d\ gcc -S hola.i -o hola.s\x0d\ gcc -c hola.s -o hola.o\x0d\ gcc hola.c -o hola\ x0d \ ./hola mundo