GCC (GNU Compiler Collection) es un software de línea de comandos de código abierto diseñado para actuar como un compilador para sistemas operativos basados en GNU / Linux y BSD. Incluye front-ends para numerosos lenguajes de programación, incluidos Objective-C, Go, C ++, Java, C, Ada y Fortran.
Características de un vistazo
Con GCC puede configurar, compilar e instalar aplicaciones GNU / Linux en sistemas operativos Linux o BSD usando solo el archivo fuente del programa respectivo. Sin embargo, los usuarios no necesitan interactuar con el compilador, ya que esto se realiza automáticamente mediante la configuración y la creación de scripts.
El proyecto también incluye bibliotecas para varios lenguajes de programación, como libstdc y libgcj, y al igual que la mayoría del software GNU, debe configurarse antes de poder compilarse e instalarse en su computadora.
También puede mostrar la ruta completa a una biblioteca específica, carpetas en la ruta de búsqueda del compilador, ruta completa a un componente específico, directorio de bibliotecas de destino, sufijo sysroot que se usa para encontrar encabezados y triplete de GNU normalizado del objetivo.
Además, hay varias otras opciones para pasar ciertas opciones y argumentos separados por comas al ensamblador, preprocesador y enlazador, compilar y ensamblar sin vincular, crear una biblioteca compartida y muchas otras.
Diseñado para el sistema operativo GNU
Originalmente escrito como el compilador principal para el sistema operativo GNU, GCC (GNU Compiler Collection) fue desarrollado para ser un software 100% libre y se instala por defecto en cualquier distribución de Linux.
El software también lo utilizan los desarrolladores de código abierto para compilar sus programas. La línea de comandos viene con varias opciones, entre las cuales podemos mencionar la capacidad de mostrar el procesador de destino del compilador, así como la ruta relativa a las bibliotecas del sistema operativo.
Línea de fondo
En general, GCC es uno de los componentes más esenciales de cualquier sistema operativo GNU / Linux. No solo eso, ni siquiera podemos imaginar un mundo sin él, sino que GCC es la razón principal detrás de todo el ecosistema de código abierto.
Qué hay de nuevo en este lanzamiento:
- GCC 7.3 es una versión de corrección de errores de la rama 7 de GCC que contiene correcciones importantes para regresiones y errores graves en GCC 7.2 con más de 99 errores corregidos desde la versión anterior.
- Esta versión incluye opciones de generación de código para mitigar la variante Specter 2 (CVE 2017-5715) para los objetivos x86 y powerpc.
Qué hay de nuevo en la versión 8.1.0:
- GCC 7.3 es una versión de corrección de fallas del La rama 7 de GCC contiene correcciones importantes para regresiones y errores graves en GCC 7.2 con más de 99 errores corregidos desde la versión anterior.
- Esta versión incluye opciones de generación de código para mitigar la variante Specter 2 (CVE 2017-5715) para los objetivos x86 y powerpc.
Qué hay de nuevo en la versión:
- GCC 7.1 es una versión importante que contiene nuevas funcionalidades sustanciales que no están disponibles en GCC 6.xo versiones anteriores de GCC. El frontend de C ++ ahora tiene soporte experimental para todo el borrador actual de C ++ 17, con las opciones -std = c ++ 1z y -std = gnu ++ 1z, y la biblioteca libstdc ++ tiene la mayor parte del borrador de C ++ 17 características de la biblioteca implementadas también. Esto libera características diversas mejoras en los diagnósticos emitidos, incluyendo ubicaciones mejoradas, rangos de ubicación, sugerencias para identificadores mal escritos, nombres de opciones, sugerencias de arreglos y se han agregado varias advertencias nuevas. Los optimizadores han sido mejorados, con mejoras que aparecen en todas las optimizaciones internas e interprocesales, optimizaciones de tiempo de enlace y varios backends de destino, incluyendo, entre otros, adiciones de paso de fusión de tienda, optimización de elevación de código, división de bucle y reducción envolviendo mejoras. El Address Sanitizer ahora puede informar los usos de las variables después de salir de su alcance. GCC ahora se puede configurar para la descarga de OpenMP 4.5 a NVidia PTX GPGPU.
Qué hay de nuevo en la versión 6.3.0:
- GCC 6.3 es una versión de corrección de errores de la rama 6 de GCC que contiene correcciones importantes para regresiones y errores graves en GCC 6.2 con más de 79 errores corregidos desde la versión anterior.
Qué hay de nuevo en la versión 6.2.0:
- Esta versión es una versión de corrección de errores que contiene correcciones para regresiones en GCC 5.2 en relación con versiones anteriores de GCC.
Qué hay de nuevo en la versión 6.1.0:
- Esta versión es una versión de corrección de errores que contiene correcciones para regresiones en GCC 5.2 en relación con versiones anteriores de GCC.
Qué hay de nuevo en la versión 5.3.0:
- Esta versión es una versión de corrección de errores que contiene correcciones para regresiones en GCC 5.2 en relación con versiones anteriores de GCC.
Qué hay de nuevo en la versión 5.2.0:
- Esta versión es una versión de corrección de errores que contiene correcciones para regresiones en GCC 5.1 en relación con versiones anteriores de GCC.
Qué hay de nuevo en la versión 5.1.0:
- El front-end de C ++ ahora tiene soporte completo de lenguaje C ++ 14 y la biblioteca estándar de C ++ tiene soporte completo de C ++ 11 y soporte experimental completo de C ++ 14. El soporte completo de C ++ 11 ha sido posible mediante la adopción de Dual ABI, consulte https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html para obtener más detalles.
- El front-end de C ahora está predeterminado en modo C11 con extensiones de GNU, lo que afecta la semántica de la palabra clave en línea y trae otros cambios visibles para el usuario, vea https://gcc.gnu.org/gcc-5/porting_to.html para más detalles.
- GCC 5.1 contiene varias mejoras de optimización interprocedural, p. un nuevo pase plegable de código idéntico de IPA y varias mejoras de LTO, p. Combinación basada en ODR de tipos de C ++, consulte http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html para obtener más detalles.
- El Localizador de Registro Local de GCC 5.1 ahora contiene un subpaso de rematerialización, en i? 86 / x86-64 es capaz de reutilizar el registro de PIC duro para mejorar el rendimiento del código de posición independiente, hay un simple pase interprocedimiento RA y varios otros registros Se agregaron mejoras de asignación.
- GCC 5.1 agrega soporte parcial para el estándar OpenACC, soporte para la descarga de OpenMP 4.0 a los futuros aceleradores Xeon Phi de Intel y soporte para la descarga de OpenACC a PTX. El desinfectante de comportamiento indefinido en GCC se ha ampliado al agregar varios controles de tiempo de ejecución nuevos. Se ha agregado una biblioteca GIT JIT experimental en GCC 5.1.
Qué hay de nuevo en la versión 4.8.4:
- Mejoras generales del optimizador:
- AddressSanitizer, un detector de errores de memoria rápida, ahora está disponible en ARM.
- UndefinedBehaviorSanitizer (ubsan), un detector de comportamiento rápido e indefinido, se ha agregado y se puede habilitar a través de -fsanitize = undefined. Varios cómputos estarán instrumentados para detectar un comportamiento indefinido en el tiempo de ejecución. UndefinedBehaviorSanitizer está actualmente disponible para los idiomas C y C ++.
- Mejoras en la optimización del tiempo de enlace (LTO):
- Se reescribió la fusión de tipos. La nueva implementación es significativamente más rápida y usa menos memoria.
- Mejor algoritmo de partición que da como resultado menos transmisión durante el tiempo de enlace.
- La eliminación temprana de métodos virtuales reduce el tamaño de los archivos de objeto y mejora el uso de la memoria de tiempo de enlace y el tiempo de compilación.
- Los cuerpos de funciones ahora se cargan a pedido y se publican temprano, lo que mejora el uso general de la memoria en el momento del enlace.
- Los métodos ocultos de C ++ ahora se pueden optimizar.
- Cuando se utiliza un complemento de enlazador, la compilación con la opción -flto ahora genera archivos de objetos delgados (.o) que solo contienen una representación del lenguaje intermedio para LTO. Use -ffat-lto-objects para crear archivos que contengan adicionalmente el código del objeto. Para generar bibliotecas estáticas adecuadas para el procesamiento LTO, use gcc-ar y gcc-ranlib; para listar símbolos de un archivo de objeto delgado, use gcc-nm. (Esto requiere que ar, ranlib y nm se hayan compilado con soporte para complementos).
- El uso de memoria construyendo Firefox con depuración habilitada se redujo de 15 GB a 3.5 GB; tiempo de enlace de 1700 segundos a 350 segundos.
- Mejoras de optimización interprocedimiento:
- Nuevo módulo de análisis de herencia de tipos que mejora la desvirtualización. La virtualización ahora tiene en cuenta los espacios de nombres anónimos y la palabra clave final de C ++ 11.
- Nuevo pase de desvirtualización especulativa (controlado por -fdevirtualize-especulativamente.
- Las llamadas que se hicieron de forma directa y especulativa se vuelven indirectas cuando la llamada directa no es más barata.
- Los alias locales se introducen para los símbolos que se sabe que son semánticamente equivalentes en las bibliotecas compartidas, lo que mejora los tiempos dinámicos de enlace.
- Mejoras de optimización dirigidas a comentarios:
- La creación de perfiles de programas que usan funciones en línea de C ++ ahora es más confiable.
- El nuevo perfil de tiempo determina el orden típico en el que se ejecutan las funciones.
- Un nuevo paso de reordenamiento de funciones (controlado por -freorder-functions) reduce significativamente el tiempo de inicio de las aplicaciones grandes. Hasta que se complete el soporte de binutils, solo es efectivo con la optimización del tiempo de enlace.
- La eliminación de llamadas indirectas impulsadas por la retroalimentación y la desvirtualización ahora manejan las llamadas entre módulos cuando la optimización del tiempo de enlace está habilitada.
- Nuevas mejoras específicas de idiomas y idiomas:
- La versión 4.0 de la especificación OpenMP ahora es compatible con los compiladores C y C ++ y comienza con la versión 4.9.1 también en el compilador Fortran. La nueva opción -fopenmp-simd se puede usar para habilitar las directivas SIMD de OpenMP, mientras se ignoran otras directivas OpenMP. La nueva opción -fsimd-cost-model = permite ajustar el modelo de costo de vectorización para bucles anotados con las directivas simd OpenMP y Cilk Plus; -Wopenmp-simd advierte cuando el modelo de costo actual anula las directivas simd establecidas por el usuario.
- La opción -Wdate-time se ha agregado para los compiladores C, C ++ y Fortran, que avisa cuando se usan las macros __DATE__, __TIME__ o __TIMESTAMP__. Esas macros pueden evitar compilaciones reproducibles idénticas en bits.
- Ada:
- GNAT cambió a Ada 2012 en lugar de Ada 2005 de manera predeterminada.
- familia C:
- Se ha agregado compatibilidad para colorear diagnósticos emitidos por GCC. El -fdiagnostics-color = auto lo habilitará al enviar a terminales, -fdiagnostics-color = always inconditionally. La variable de entorno GCC_COLORS se puede usar para personalizar los colores o deshabilitar la coloración. Si la variable GCC_COLORS está presente en el entorno, el valor predeterminado es -fdiagnostics-color = auto, de lo contrario -fdiagnostics-color = never.
- Ejemplo de resultado de diagnóstico:
- $ g ++ -fdiagnostics-color = always -S -Wall test.C
- test.C: en la función & lsquo; int foo () ':
- test.C: 1: 14: advertencia: ninguna declaración de devolución en la función devuelve no válido [-Wreturn-type]
- int foo () {}
- test.C: 2: 46: error: la profundidad de instanciación de la plantilla excede el máximo de 900 (use -ftemplate-depth = para aumentar el máximo) instanciando & lsquo; struct X '
- template struct X {static const int value = X :: value; }; plantilla struct X;
- test.C: 2: 46: requerido recursivamente desde & lsquo; const int X :: value '
- test.C: 2: 46: obligatorio de & lsquo; const int X :: value '
- test.C: 2: 88: requerido desde aquí
- test.C: 2: 46: error: tipo incompleto & lsquo; X 'utilizado en el especificador de nombre anidado
- Con el nuevo #pragma GCC ivdep, el usuario puede afirmar que no existen dependencias de bucle que impidan la ejecución simultánea de iteraciones consecutivas utilizando instrucciones SIMD (instrucción única de datos múltiples).
- Se agregó compatibilidad con Cilk Plus y se puede habilitar con la opción -fcilkplus. Cilk Plus es una extensión de los lenguajes C y C ++ para soportar el paralelismo de datos y tareas. La presente implementación sigue a ABI versión 1.2; todas las características pero _Cilk_for han sido implementadas.
- Los atomics ISO C11 (el _Atomic type specifier and qualifier y el header) ahora son compatibles.
- Las selecciones genéricas de ISO C11 (_Generic keyword) ahora son compatibles.
- Ahora se admite el almacenamiento de subprocesos locales ISO C11 (_Thread_local, similar a GNU C __thread).
- La compatibilidad con ISO C11 ahora se encuentra en un nivel similar de compatibilidad con ISO C99: errores de módulo sustancialmente completos, identificadores extendidos (soportados excepto en casos de esquina cuando se usan identificadores -fxtended), problemas de coma flotante (principalmente pero no completamente) en relación con las características opcionales C99 de los Anexos F y G) y los Anexos K opcionales (Interfaces de verificación de límites) y L (Analizabilidad).
- Una nueva extensión C __auto_type proporciona un subconjunto de la funcionalidad de C ++ 11 automático en GNU C.
- C ++:
- La implementación de G ++ de la deducción del tipo de retorno C ++ 1y para funciones normales se ha actualizado para cumplir con N3638, la propuesta aceptada en el documento de trabajo. Lo más notable es que agrega decltype (auto) para obtener la semántica de decltype en lugar de la semántica de deducción de argumento de plantilla de plain auto:
- int & amp; f ();
- auto i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ admite inicializadores de captura lambda C ++ 1y:
- [x = 42] {...};
- En realidad, han sido aceptados desde GCC 4.5, pero ahora el compilador no los avisa con -std = c ++ 1y, y también admite inicializadores entre paréntesis y corchetes.
- G ++ admite matrices de longitud variable C ++ 1y. G ++ ha sido compatible con VLA de estilo GNU / C99 durante mucho tiempo, pero ahora también admite inicializadores y captura lambda por referencia. En el modo C ++ 1y, G ++ se quejará de los usos de VLA que no están permitidos por el borrador del estándar, como formar un puntero al tipo de VLA o aplicar sizeof a una variable VLA. Tenga en cuenta que ahora parece que los VLA no serán parte de C ++ 14, sino que formarán parte de un documento separado y tal vez C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // arroja std :: bad_array_length si n & lt; 3
- [& amp; a] {for (int i: a) {cout
Qué hay de nuevo en la versión 4.9.1:
- GCC 4.9.1 es una versión de corrección de errores de la rama 4.9 de GCC que contiene correcciones importantes para regresiones y errores graves en GCC 4.9.0 con más de 88 errores corregidos desde la versión anterior. Además de eso, la versión GCC 4.9.1 es compatible con OpenMP 4.0 también en Fortran, en lugar de solo en C y C ++.
Qué hay de nuevo en la versión 4.9.0:
- Mejoras generales del optimizador:
- AddressSanitizer, un detector de errores de memoria rápida, ahora está disponible en ARM.
- UndefinedBehaviorSanitizer (ubsan), un detector de comportamiento rápido e indefinido, se ha agregado y se puede habilitar a través de -fsanitize = undefined. Varios cómputos estarán instrumentados para detectar un comportamiento indefinido en el tiempo de ejecución. UndefinedBehaviorSanitizer está actualmente disponible para los idiomas C y C ++.
- Mejoras en la optimización del tiempo de enlace (LTO):
- Se reescribió la fusión de tipos. La nueva implementación es significativamente más rápida y usa menos memoria.
- Mejor algoritmo de partición que da como resultado menos transmisión durante el tiempo de enlace.
- La eliminación temprana de métodos virtuales reduce el tamaño de los archivos de objeto y mejora el uso de la memoria de tiempo de enlace y el tiempo de compilación.
- Los cuerpos de funciones ahora se cargan a pedido y se publican temprano, lo que mejora el uso general de la memoria en el momento del enlace.
- Los métodos ocultos de C ++ ahora se pueden optimizar.
- Cuando se usa un complemento de enlazador, la compilación con la opción -flto ahora genera archivos de objetos delgados (.o) que solo contienen una representación del lenguaje intermedio para LTO. Use -ffat-lto-objects para crear archivos que contengan adicionalmente el código del objeto. Para generar bibliotecas estáticas adecuadas para el procesamiento LTO, use gcc-ar y gcc-ranlib; para listar símbolos de un archivo de objeto delgado, use gcc-nm. (Requiere que ar, ranlib y nm se hayan compilado con soporte para complementos).
- El uso de memoria construyendo Firefox con depuración habilitada se redujo de 15 GB a 3.5 GB; tiempo de enlace de 1700 segundos a 350 segundos.
- Mejoras de optimización interprocedimiento:
- Nuevo módulo de análisis de herencia de tipos que mejora la desvirtualización. La virtualización ahora tiene en cuenta los espacios de nombres anónimos y la palabra clave final de C ++ 11.
- Nuevo pase de desvirtualización especulativa (controlado por -fdevirtualize-especulativamente.
- Las llamadas que se hicieron de forma directa y especulativa se vuelven indirectas cuando la llamada directa no es más barata.
- Los alias locales se introducen para los símbolos que se sabe que son semánticamente equivalentes en las bibliotecas compartidas, lo que mejora los tiempos dinámicos de enlace.
- Mejoras de optimización dirigidas a comentarios:
- La creación de perfiles de programas que usan funciones en línea de C ++ ahora es más confiable.
- El nuevo perfil de tiempo determina el orden típico en el que se ejecutan las funciones.
- Un nuevo paso de reordenamiento de funciones (controlado por -freorder-functions) reduce significativamente el tiempo de inicio de las aplicaciones grandes. Hasta que se complete el soporte de binutils, solo es efectivo con la optimización del tiempo de enlace.
- La eliminación de llamadas indirectas impulsadas por la retroalimentación y la desvirtualización ahora manejan las llamadas entre módulos cuando la optimización del tiempo de enlace está habilitada.
- Nuevas mejoras específicas de idiomas y idiomas:
- La versión 4.0 de la especificación OpenMP ahora es compatible con los compiladores C y C ++. La nueva opción -fopenmp-simd se puede usar para habilitar las directivas SIMD de OpenMP, mientras se ignoran otras directivas OpenMP. La nueva opción -fsimd-cost-model = permite ajustar el modelo de costo de vectorización para bucles anotados con las directivas simd OpenMP y Cilk Plus; -Wopenmp-simd advierte cuando el modelo de costo actual anula las directivas simd establecidas por el usuario.
- La opción -Wdate-time se ha agregado para los compiladores C, C ++ y Fortran, que avisa cuando se usan las macros __DATE__, __TIME__ o __TIMESTAMP__. Esas macros pueden evitar compilaciones reproducibles idénticas en bits.
- Ada:
- GNAT cambió a Ada 2012 en lugar de Ada 2005 de manera predeterminada.
- familia C:
- Se ha agregado compatibilidad para colorear diagnósticos emitidos por GCC. El -fdiagnostics-color = auto lo habilitará al enviar a terminales, -fdiagnostics-color = always inconditionally. La variable de entorno GCC_COLORS se puede usar para personalizar los colores o deshabilitar la coloración. Si la variable GCC_COLORS está presente en el entorno, el valor predeterminado es -fdiagnostics-color = auto, de lo contrario -fdiagnostics-color = never.
- Ejemplo de resultado de diagnóstico:
- $ g ++ -fdiagnostics-color = always -S -Wall test.C
- test.C: en la función & lsquo; int foo () ':
- test.C: 1: 14: advertencia: ninguna declaración de devolución en la función devuelve no válido [-Wreturn-type]
- int foo () {}
- test.C: 2: 46: error: la profundidad de instanciación de la plantilla excede el máximo de 900 (use -ftemplate-depth = para aumentar el máximo) instanciando & lsquo; struct X '
- template struct X {static const int value = X :: value; }; plantilla struct X;
- test.C: 2: 46: requerido recursivamente desde & lsquo; const int X :: value '
- test.C: 2: 46: obligatorio de & lsquo; const int X :: value '
- test.C: 2: 88: requerido desde aquí
- test.C: 2: 46: error: tipo incompleto & lsquo; X 'utilizado en el especificador de nombre anidado
- Con el nuevo #pragma GCC ivdep, el usuario puede afirmar que no existen dependencias de bucle que impidan la ejecución simultánea de iteraciones consecutivas utilizando instrucciones SIMD (instrucción única de datos múltiples).
- Se agregó compatibilidad con Cilk Plus y se puede habilitar con la opción -fcilkplus. Cilk Plus es una extensión de los lenguajes C y C ++ para soportar el paralelismo de datos y tareas. La presente implementación sigue a ABI versión 1.2; todas las características pero _Cilk_for han sido implementadas.
- Los atomics ISO C11 (el _Atomic type specifier and qualifier y el header) ahora son compatibles.
- Las selecciones genéricas de ISO C11 (_Generic keyword) ahora son compatibles.
- Ahora se admite el almacenamiento de subprocesos locales ISO C11 (_Thread_local, similar a GNU C __thread).
- La compatibilidad con ISO C11 ahora se encuentra en un nivel similar de compatibilidad con ISO C99: errores de módulo sustancialmente completos, identificadores extendidos (soportados excepto en casos de esquina cuando se usan identificadores -fxtended), problemas de coma flotante (principalmente pero no completamente) en relación con las características opcionales C99 de los Anexos F y G) y los Anexos K opcionales (Interfaces de verificación de límites) y L (Analizabilidad).
- Una nueva extensión C __auto_type proporciona un subconjunto de la funcionalidad de C ++ 11 automático en GNU C.
- C ++:
- La implementación de G ++ de la deducción del tipo de retorno C ++ 1y para funciones normales se ha actualizado para cumplir con N3638, la propuesta aceptada en el documento de trabajo. Lo más notable es que agrega decltype (auto) para obtener la semántica de decltype en lugar de la semántica de deducción de argumento de plantilla de plain auto:
- int & amp; f ();
- auto i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ admite inicializadores de captura lambda C ++ 1y:
- [x = 42] {...};
- En realidad, han sido aceptados desde GCC 4.5, pero ahora el compilador no los avisa con -std = c ++ 1y, y también admite inicializadores entre paréntesis y corchetes.
- G ++ admite matrices de longitud variable C ++ 1y. G ++ ha sido compatible con VLA de estilo GNU / C99 durante mucho tiempo, pero ahora también admite inicializadores y captura lambda por referencia. En el modo C ++ 1y, G ++ se quejará de los usos de VLA que no están permitidos por el borrador del estándar, como formar un puntero al tipo de VLA o aplicar sizeof a una variable VLA. Tenga en cuenta que ahora parece que los VLA no serán parte de C ++ 14, sino que formarán parte de un documento separado y tal vez C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // arroja std :: bad_array_length si n & lt; 3
- [& amp; a] {for (int i: a) {cout
1 Comentarios
http://www.eduwizzonlinetrainings.com 29 Dec 17
EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc