Red de conocimiento de divisas - Cuestiones de seguridad social - ¿Qué es el compilador GCC?

¿Qué es el compilador GCC?

Gcc (GNU C Compiler) en el sistema Linux es un compilador multiplataforma potente y de alto rendimiento lanzado por GNU. Es una de las obras maestras de GNU. Gcc es un supercompilador que puede compilar programas ejecutables en varias plataformas de hardware, con una eficiencia de ejecución entre un 20% y un 30% mayor que la de los compiladores normales.

El compilador Gcc puede compilar y conectar programas fuente, ensambladores y programas de destino en lenguajes C y C++ en archivos ejecutables. Si no se proporciona el nombre del archivo ejecutable, gcc generará un archivo llamado a.out. En el sistema Linux, los archivos ejecutables no tienen un sufijo unificado. El sistema distingue los archivos ejecutables y los no ejecutables según sus atributos. Gcc usa sufijos para distinguir las categorías de archivos de entrada. A continuación se muestran algunas convenciones que sigue gcc.

. C es el archivo con sufijo, archivo de código fuente en lenguaje C;

El archivo con. El sufijo es un archivo compuesto por archivos de destino;

El archivo con el sufijo es. do,. CC o. cxx es un archivo de código fuente C++;

archivo incluido. El sufijo h es el archivo de encabezado incluido en el programa;

Archivos incluidos. El sufijo I es un archivo de código fuente C preprocesado

Archivos incluidos. El sufijo ii es un archivo de código fuente C++ preprocesado;

archivo incluido. El sufijo m es un archivo de código fuente Objective-C

El archivo incluido. El sufijo o es el archivo objeto compilado;

Un archivo. El sufijo s es un archivo de código fuente en lenguaje ensamblador;

Un archivo con un sufijo. s es un archivo de código fuente en lenguaje ensamblador precompilado.

Proceso de implementación de Gcc

Aunque llamamos a gcc un compilador de lenguaje C, el proceso de usar Gcc para generar un archivo ejecutable a partir de un archivo de código fuente de lenguaje C no es solo una compilación. También implica cuatro pasos interrelacionados: preprocesamiento, compilación, ensamblaje y vinculación.

El comando gcc primero llama a cpp para su preprocesamiento. Durante el preprocesamiento, las inclusiones de archivos y las declaraciones precompiladas (como definiciones de macros, etc.) se analizan en los archivos de código fuente. Luego llame a cc1 para compilar. En esta etapa, con. oEl sufijo se genera en función del archivo de entrada. El proceso de ensamblaje se refiere a los pasos del lenguaje ensamblador, llamando a trabajar. En términos generales, se utilizan archivos de código fuente en lenguaje ensamblador. sufijo para archivos en lenguaje ensamblador. los sufijos generan archivos de destino. o sufijo después de la precompilación y el ensamblaje. Una vez generados todos los archivos de destino, gcc llama a ld para completar el trabajo clave final. Esta etapa es la conexión. Durante la fase de vinculación, todos los archivos objeto se organizan en las ubicaciones apropiadas en el programa ejecutable, y las funciones de biblioteca llamadas por el programa también se vinculan a las ubicaciones apropiadas desde sus respectivos archivos.

Uso básico y opciones de Gcc

Cuando se utiliza el compilador Gcc, se deben proporcionar una serie de parámetros de llamada y nombres de archivos necesarios. Hay más de 100 parámetros de llamada del compilador Gcc, la mayoría de los cuales es posible que no se utilicen en absoluto. Aquí solo se presentan los parámetros más básicos y comúnmente utilizados.

El uso más básico de Gcc es::Gcc[opción][nombre de archivo]].

Entre ellos, las opciones son los parámetros requeridos por el compilador y los nombres de archivo brindan los nombres de archivo relevantes.

-c, sólo compila, no vincula a un archivo ejecutable. El compilador solo genera archivos objeto con un sufijo. oDesde el archivo de código fuente de entrada, por ejemplo. c, generalmente se usa para compilar archivos de subprograma que no contienen el programa principal.

-o nombre_archivo_salida, asegúrese de que el nombre del archivo de salida sea nombre_archivo_salida y que este nombre no pueda tener el mismo nombre que el archivo fuente. Si no se proporciona esta opción, gcc proporcionará el archivo ejecutable preestablecido a.out.

-g, genera la información de símbolos necesaria para la herramienta de depuración simbólica (gdb de GNU). Si queremos depurar el código fuente tenemos que agregar esta opción.

-O, optimiza la compilación y vinculación de programas. Con esta opción, todo el código fuente se optimizará durante el proceso de compilación y vinculación, lo que puede mejorar la eficiencia de ejecución del archivo ejecutable generado, pero la velocidad de compilación y vinculación será correspondientemente más lenta.

-O2 es mejor que -O para optimizar la compilación y la conexión, pero, por supuesto, todo el proceso de compilación y conexión será más lento.

-Idirname agrega el directorio indicado por dirname a la lista de directorios del archivo de encabezado del programa. Es un parámetro utilizado durante la precompilación. El archivo de encabezado en el programa C contiene dos situaciones:

a)#includes

b)#includes "myinc.h"

Entre ellos, Clase A utiliza corchetes angulares (

-Ldirname agrega el directorio indicado por dirname a la lista de directorios del archivo de función del programa y es un parámetro utilizado durante el proceso de conexión. De forma predeterminada, el vinculador ld está en el valor predeterminado del sistema ruta (como /usr/lib). Esta opción le indica al vinculador que busque primero en el directorio especificado por -L y luego en la ruta predeterminada del sistema. Utilice esta opción para proporcionar el directorio de almacenamiento correspondiente. -lname, carga la biblioteca de funciones llamada "libname.a" al conectarse, que se encuentra en el directorio preestablecido del sistema o en el directorio determinado por la opción -L. Por ejemplo, -lm significa conectar una biblioteca de funciones matemáticas llamada "libm. .a".

Arriba, presentamos brevemente las funciones más utilizadas y las opciones de parámetros principales del compilador gcc con más detalle. Para obtener información, consulte la ayuda en línea del sistema Linux.

Supongamos que tenemos un archivo de código fuente en lenguaje C llamado test.c. La forma más sencilla de generar un archivo ejecutable es:

gcc test

En este momento, el pre. -La compilación y la conexión de compilación se completan al mismo tiempo, y el sistema genera un archivo ejecutable llamado a.out. Para situaciones un poco más complicadas, como varios archivos de código fuente, si necesita conectarse al archivo. Para otros requisitos especiales, debe proporcionar los parámetros de opción de llamada adecuados.

Todo el código fuente del programa consta de dos archivos: testmain.c y testsub.c, que utiliza la biblioteca matemática proporcionada por el sistema. Se espera que el archivo ejecutable sea probado. En este momento, el comando de compilación puede ser:

gcc test main. c test sub c□lm□o test

Donde -lm representa el. biblioteca matemática libm.a del sistema conectado

Tipos de errores y contramedidas en Gcc

Si el compilador de Gcc encuentra un error en el programa fuente, no puede continuar con el archivo ejecutable final. No se pueden generar. Para facilitar la modificación, gcc proporciona mensajes de error. Debemos analizar y procesar estos mensajes de error uno por uno y modificar el idioma correspondiente para garantizar la correcta compilación y conexión del código fuente. se divide en cuatro categorías. Las causas y las contramedidas se analizan a continuación.

Categoría 1: error de sintaxis de clase C

Mensaje de error: hay un error de sintaxis en el archivo fuente (syntex. error) C Este tipo de error es generalmente un error de sintaxis en el lenguaje C, por lo que debemos verificar cuidadosamente el programa antes de n líneas en el archivo de código fuente y, a veces, debemos verificar el archivo de encabezado incluido en este archivo. circunstancias, gcc dará muchos errores por un simple error de sintaxis. Lo más importante para nosotros es mantener la cabeza despejada y no dejarnos intimidar por ello. Si es necesario, consulte el libro de texto básico del lenguaje C.

Categoría 2: Error en el archivo de encabezado

Mensaje de error: No se puede encontrar el archivo de encabezado head.h (no se puede encontrar el archivo de inclusión head.h). Este error se debe a un problema con el archivo de encabezado en el archivo de código fuente. Los posibles motivos incluyen un nombre de archivo de encabezado incorrecto, un nombre de directorio incorrecto para el archivo de encabezado especificado, etc. , o uso incorrecto de comillas dobles y corchetes angulares.

Categoría 3: Error de archivo

Mensaje de error: El vinculador no puede encontrar la biblioteca requerida, por ejemplo:

ld: -lm: No existe tal archivo o directorio

Este error es un error en la biblioteca de funciones vinculada al archivo de destino. Las posibles razones son que el nombre de la biblioteca de funciones es incorrecto y el nombre del directorio donde se encuentra la biblioteca de funciones especificada es incorrecto. El método de verificación es usar el comando buscar para encontrar el nombre de la biblioteca de funciones correspondiente en un posible directorio, determinar el nombre del archivo y el directorio y modificar el nombre en el programa y las opciones de compilación.

Categoría 4: Símbolo no definido

Mensaje de error: Hay un símbolo no definido.

Este error ocurre durante el proceso de conexión. Puede haber dos razones: Primero, el archivo de código fuente donde se encuentra la función definida por el usuario o la variable global no se ha compilado, conectado o no está definido en absoluto. programa fuente de acuerdo con la situación real y proporcione el cuerpo de definición global de una variable o función; en segundo lugar, un símbolo indefinido es una función de biblioteca estándar que se utiliza en el programa fuente, pero el nombre de la biblioteca correspondiente no se proporciona durante la ejecución. proceso de conexión o hay un problema con el nombre del directorio de archivos. En este momento, debemos usar el comando de mantenimiento de archivos ar para verificar qué función de biblioteca necesitamos y luego modificar los elementos -l y -L en la opción de conexión gcc después de la confirmación.

Se debe decir que eliminar errores durante el proceso de compilación y conexión es solo el paso más simple y básico de la programación. Se puede decir que es solo el comienzo. Los errores en este proceso son simplemente errores que cometemos al describir un algoritmo en lenguaje C y son relativamente fáciles de eliminar. Escribimos un programa hasta compilarlo y vincularlo. Hay que decir que esto acaba de empezar. Los problemas que surgen durante la ejecución del programa son problemas de diseño de algoritmos. Más específicamente, nuestro conocimiento y comprensión del problema es insuficiente y requiere pruebas, depuración y modificación más profundas. Un programa, un programa un poco más complejo, a menudo necesita ser compilado, vinculado, probado y modificado muchas veces. El mantenimiento del programa, las herramientas de depuración y el mantenimiento de la versión que aprendemos a continuación se utilizan durante el proceso de depuración y prueba del programa para resolver problemas en la fase de depuración. Encabezado

Parte inferior del formulario

上篇: 下篇: ¿El fondo de previsión de vivienda es a nivel nacional o por región?
Artículos populares