Se requieren dos entornos principales para el funcionamiento de los programas de lenguaje C "C Language Advanced"

Tabla de contenido

 El entorno de traducción y el entorno de ejecución del programa.

El entorno de traducción se divide en dos partes, compilar + enlace

El primer paso: precompilar (preprocesamiento)

El segundo paso, compilar

Paso 3: Compilar

Hay cuatro puntos sobre el entorno operativo:

Acerca de las bibliotecas de enlaces


 El entorno de traducción y el entorno de ejecución del programa.

En cualquier implementación de ANSI C (Estándar C) , hay dos entornos distintos.
*El primer tipo es el entorno de traducción. En este entorno, el código fuente se convierte en instrucciones de máquina ejecutables.
En el compilador (tome VS2019 como ejemplo), el código de lenguaje C que escribimos es toda la información de texto (varias cadenas, datos, estructuras, etc.), desde un punto de vista humano, podemos entenderlo, pero las computadoras no pueden , el código debe traducirse en instrucciones que la computadora pueda reconocer: instrucciones binarias

*El segundo tipo es el entorno de ejecución. Se utiliza para ejecutar realmente el código.
El código de instrucción binario generado después de que el código pasa por el entorno de traducción es ejecutado y generado por el entorno de ejecución.

Pasos para generar un programa ejecutable cuando se compila el código:

1. Cada archivo fuente que conforma un programa se convierte en código objeto ( object code ) a través del proceso de compilación.
2. Un enlazador agrupa cada archivo de objeto para formar un programa ejecutable único y completo.
3. El enlazador también importará cualquier función utilizada por el programa en la biblioteca de funciones C estándar, y puede buscar en la biblioteca de programas personales del programador y vincular las funciones que necesita en el programa.
En breve:
El compilador compila por separado cada archivo fuente (.c) para generar un archivo objeto (.obj), y el vinculador procesa el archivo objeto y la biblioteca de vínculos (este proceso se denomina vinculación) para generar un programa ejecutable (. exe).
Como se muestra abajo

El entorno de traducción se divide en dos partes, compilar + enlace

  

La compilación en sí también se divide en varias etapas: preprocesamiento, compilación, ensamblaje.

 A continuación, usamos un código simple, el nombre del archivo fuente (test.c), y usamos el editor gcc para demostrar todo el proceso;

El primer paso: precompilar (preprocesamiento)

Las instrucciones precompiladas son: archivo fuente gcc.c -E - nombre del archivo fuente + .i 

1. Opción de preprocesamiento gcc - E test.c - o test.i
Deténgase después de que se complete el preprocesamiento y los resultados generados después del preprocesamiento se colocarán en el archivo test.i. El contenido específico se puede ver en la siguiente figura.

Como el siguiente código:

源文件文件名 :test.c

#include<stdio.h>

//定义全局变量,赋值2023
int year = 2023;
#define M 100
int main()
{
	int a = M;
	printf("%d\n", M);

	return 0;
}

1. Introduzca el comando gcc test.c -E -test i

Salida terminal:


2. Observe el contenido de test.c y test.i


 3. Ver en el archivo test.i

Descubrimos que al final de todo el código de test.i está el contenido de nuestro código fuente, entonces, ¿cuáles son los cientos de líneas de código que se encuentran delante de él? Se incluye todo el contenido del archivo de encabezado <stdio.h> . Al mismo tiempo, los estudiantes cuidadosos encontraron que no hay comentarios en test.i, y no hay un símbolo M definido por la macro, por lo que la función de preprocesamiento es:

  1. Eliminación de comentarios
  2. #include<stddio.h>La inclusión del archivo de cabecera
  3. Reemplazo de símbolos #define
  4. manipulación de texto
  5. Todas las instrucciones de preprocesamiento se procesan en la etapa de preprocesamiento

El segundo paso, compilar

Instrucción de compilación: gcc -S archivo fuente.c / gcc -S nombre del archivo fuente + .i

opción de compilación gcc -S test.c
Opción de compilación gcc -S test.i (al compilar, ambos archivos se pueden ingresar en el comando y se generará el archivo test.s)
Deténgase después de que se complete la compilación y el resultado se guarde en test.s.
Ingresemos  gcc - S test.c como ejemplo

1. Ingrese el comando gcc -S prueba.c / gcc -S prueba.i

Salida terminal:


2. Genere el contenido del archivo test.s y muestre el contenido del archivo test.s

 


3. Resumen:

La parte del círculo amarillo de arriba es el contenido de test.s, que es la instrucción de montaje. La función de la compilación es traducir el código del lenguaje C en instrucciones de ensamblaje. El método de compilación es a través de: análisis sintáctico, análisis léxico, análisis semántico, resumen de símbolos, etc. En general, la compilación es la acción de desensamblar y analizar nuestro código en lenguaje c, y luego traducirlo en instrucciones de ensamblado para el siguiente ensamblado.

Paso 3: Compilar

Instrucciones de ensamblaje: gcc -c archivo fuente.c / gcc -c nombre del archivo fuente + .s

ensamblar gcc -c prueba.c
Una vez completada la compilación, se detiene y el resultado se guarda en test.o.

 1. Ingrese el comando gcc -c prueba.c / gcc-c prueba.s

Salida terminal:


 

2. Se genera el archivo de destino de test.o

Pero encontrará que este es el archivo binario almacenado en el archivo de objeto test.o, y el compilador no admite mostrarlo.Si aún desea abrirlo, como se muestra a continuación;


 


 3. Resumen:

1. Las instrucciones binarias se almacenan en el archivo de objeto

2. El ensamblaje es la traducción de las instrucciones de ensamblaje a instrucciones binarias.

Por cierto: el archivo de destino test.o generado por la compilación gcc en Linux, y la prueba del programa ejecutable se almacenan en este formato de archivo de ELF 

Finalmente, el proceso anterior completa la compilación y luego el proceso de vinculación

Instrucción de enlace: gcc source filename.o -o new filename 

Vincular archivos de objetos. puede generar un archivo ejecutable

 1. Ingrese el comando: gcc test.o -o vskkk

Terminal de salida:


2, verifique el contenido de vskkk

 Sin embargo, el archivo sigue siendo binario y no se puede ver.


3. Resumen:

El papel del enlace es:

1. Combinar segmentos de línea

2. Fusión y reubicación de la tabla de símbolos

 


Hay cuatro puntos sobre el entorno operativo:

En comparación con el entorno de traducción, el entorno operativo es mucho más fácil de entender. La comprensión popular tiene los siguientes puntos:

1. El programa debe cargarse en la memoria. En un entorno con sistema operativo: Generalmente esto lo hace el sistema operativo. En un entorno independiente, la carga del programa debe organizarse manualmente, posiblemente colocando el código ejecutable en la memoria de solo lectura.
2. Comienza la ejecución del programa. Luego llame a la función principal .
3. Comience a ejecutar el código del programa. En este momento, el programa utilizará una pila en tiempo de ejecución (stack) para almacenar las variables locales y funciones de retorno de la función.
DIRECCIÓN. El programa también puede usar memoria estática ( estática ) al mismo tiempo, y las variables almacenadas en la memoria estática se usan durante la ejecución del programa.
Conservar siempre sus valores.
4. Finalice el programa. Terminación normal de la función principal ; también es posible la terminación inesperada.

Acerca de las bibliotecas de enlaces

Sabemos que al escribir código en lenguaje C, podemos usar directamente funciones de biblioteca como scanf() y printf() siempre que agreguemos el archivo de encabezado #include<stdio.h>, entonces, ¿por qué podemos usarlas directamente? La razón es que hemos compilado estas funciones de biblioteca con anticipación, las hemos empaquetado en una biblioteca estática y podemos proporcionárnoslas directamente, como la función scanf con la que estamos familiarizados, como se muestra en el círculo rojo en la figura a continuación, y el sufijo de la parte marcada termina con LIB.Es la biblioteca estática (.LIB), la biblioteca estática de la función de biblioteca y el archivo de objeto están vinculados en el enlazador para generar un programa ejecutable. El programa puede ejecutarse.


Lo anterior es todo el contenido, espero que pueda ayudarlo, si puede, espero que pueda darle un pulgar hacia arriba y apoyo al blogger, gracias. Si hay errores, espero que todos puedan criticar y señalar en el área de comentarios, y haré las correcciones.

 

Supongo que te gusta

Origin blog.csdn.net/LHY537200/article/details/131763607
Recomendado
Clasificación