Red de conocimiento informático - Material del sitio web - Cómo usar gcc para compilar archivos en Linux

Cómo usar gcc para compilar archivos en Linux

En la terminal, ingrese gcc filename -o target filename

y luego ./target filename. Si no hay un nombre de archivo de destino, el archivo se guardará automáticamente como

y se ejecutará. ./a. .

Al utilizar 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]

Las opciones son los parámetros requeridos por el compilador y los nombres de archivo son los nombres de los archivos relacionados.

-c, solo compila, no vincula al archivo ejecutable. El compilador simplemente genera un archivo objeto con un sufijo .o a partir del .c de entrada y otros archivos fuente. programas que no contienen el archivo de subrutina principal.

-o nombre_archivo_salida determina el nombre del archivo de salida como nombre_archivo_salida, y el nombre no puede ser el mismo que el del archivo fuente.

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

-O, optimizar la compilación y el enlace. Al usar esta opción, todo el código fuente se optimizará durante el proceso de compilación y enlace, mejorando así la eficiencia de ejecución del archivo ejecutable generado, pero la velocidad de compilación y enlace. será la desaceleración correspondiente.

-O2, el efecto de optimización durante la compilación y vinculación es mejor que -O, por supuesto, todo el proceso de compilación y vinculación será más lento.

-Idirname, agrega el directorio indicado por dirname a la lista de directorios de archivos de encabezado del programa, que es un parámetro utilizado en el proceso de precompilación.

Existen dos situaciones para incluir archivos de encabezado en programas C:

A)#include lt;myinc.hgt;

B)#include "myinc. h"

Entre ellos, la clase A usa corchetes angulares (lt; gt;) y la clase B usa comillas dobles (" "). Para la clase 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 la clase B, el preprocesador buscará el archivo correspondiente en la carpeta del archivo de destino. .

Ejemplo de proceso de ejecución de GCC

Código de muestra a.c:

#include lt; stdio.hgt

int main()

p>

p>

{

printf("hello\n");

}

Proceso de precompilación:

Este proceso Se procesan definiciones e inclusiones de macros y se realizan comprobaciones de 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

cat a.c | p> p>

910

Proceso de compilación:

Esta etapa genera código ensamblador.

gcc -S a.i -o a.s

cat a.s | wc -l

59

Proceso de montaje:

En esta etapa, se genera el código de destino.

Este proceso genera código objeto en formato ELF.

gcc -c a.s -o a.o

archivo a.o

a.o: ELF LSB de 64 bits reiniciable, AMD x86-64, versión 1 (SYSV), no despojado

Proceso de enlace:

Proceso de enlace. Generar código ejecutable. Hay dos tipos de enlaces, uno es un enlace estático y el otro es un enlace dinámico. La ventaja de utilizar enlaces estáticos es que depende de menos bibliotecas de enlaces dinámicos, no es 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

Programa en ejecución:

./a

hola

Editar

Ejemplo sencillo de compilación de GCC

Escribe el siguiente código:

#include lt;stdio.hgt;

int main()

{

printf("¡hola, mundo!\n");

}

Ejecuta de la siguiente manera:

gcc - E hola.c -o hola.i

gcc -S hola.i -o hola.s

gcc -c hola.s -o hola.o

gcc hola.c -o hola

./hola

¡Hola mundo!

.