4 minuto(s) de lectura

GCC

GCC Compiler es un compilador de C/C++ muy potente y popular para varias distribuciones de Linux. Este artículo explica algunas de las opciones populares del compilador GCC.

Ejemplo de código C

El siguiente código básico de C (main.c) se utilizará en este artículo:

#include <stdio.h>

int main (nulo)
{
   printf ("\ n Hello world. \ n");
   return 0;
}

Opciones del compilador GCC

Especifique el nombre ejecutable de salida

En su forma más básica, gcc main.c ejecuta el proceso de compilación completo y genera un ejecutable con el nombre a.out.

La opción -o especifica el nombre del archivo de salida para el ejecutable.

gcc main.c -o main

Habilite todas las advertencias

La opción -Wall

Esta opción habilita todas las advertencias en GCC.

#include <stdio.h>

int main (null)
{
   int i;
   printf ("\n Hello world [% d] \ n", i);
   return 0;
}

Si se compila el código anterior, se genera la siguiente advertencia relacionada con la variable no inicializada i:

$ gcc -Wall main.c -o main main.c: En función ‘main’: main.c: 6: 10: advertencia: “i” se utiliza sin inicializar en esta función [-Wuninitialized]


## Produzca solo la salida del preprocesador con la opción -E

La salida de la etapa de preprocesamiento se puede producir utilizando la opción -E.

$ gcc -E main.c> main.i

El comando gcc produce la salida en stdout para que pueda redirigir la salida en cualquier archivo. En nuestro caso (arriba), el archivo main.i contendría la salida preprocesada.
## Produzca solo el código de ensamblaje usando la opción -S

La salida de nivel de ensamblador se puede generar utilizando la opción -S.

gcc -S main.c> main.s


## Produzca solo el código compilado usando la opción -C

Para producir solo el código compilado (sin ningún enlace), use la opción -C.

gcc -C main.c


## Produzca todos los archivos intermedios usando la función -save-temps

La opción -save-temps puede hacer todo el trabajo realizado en los ejemplos 4,5 y 6 anteriores. A través de esta opción, la salida en todas las etapas de compilación se almacena en el directorio actual. Tenga en cuenta que esta opción también produce el ejecutable.

Por ejemplo :

$ gcc -save-temps main.c

$ ls a.out main.c main.i main.o main.s


Entonces vemos que todos los archivos intermedios, así como el ejecutable final, se produjeron en la salida.

## Enlace con bibliotecas compartidas usando la opción -l

La opción -l se puede usar para vincular con bibliotecas compartidas. Por ejemplo:

gcc -Wall main.c -o main -lCPPfile


## Crear código independiente de posición usando la opción -fPIC

Al crear las bibliotecas compartidas, se debe generar un código independiente de la posición. Esto ayuda a que la biblioteca compartida se cargue como cualquier dirección en lugar de una dirección fija. Para esto se usa la opción -fPIC.

Por ejemplo, los siguientes comandos crean una biblioteca compartida libCfile.so a partir del archivo fuente Cfile.c:

$ gcc -c -Wall -Werror -fPIC Cfile.c $ gcc -shared -o libCfile.so Cfile.o


## Imprima todos los comandos ejecutados usando la opción -v

La opción -v se puede usar para proporcionar información detallada sobre todos los pasos que realiza gcc al compilar un archivo fuente.

Por ejemplo :

$ gcc -Wall -v main.c -o main Usando especificaciones incorporadas. COLLECT_GCC = gcc COLLECT_LTO_WRAPPER = / usr / lib / gcc / i686-linux-gnu / 4.6 / lto-wrapper Objetivo: i686-linux-gnu Configurado con: ../src/configure -v –with-pkgversion = ‘Ubuntu / Linaro 4.6.3-1ubuntu5’ –with-bugurl = file: ///usr/share/doc/gcc-4.6/README. Errores –enable-languages ​​= c, c ++, fortran, objc, obj-c ++ –prefix = / usr –program-suffix = -4.6 –enable-shared –enable-linker-build-id –with- system-zlib –libexecdir = / usr / lib –with-included-gettext –enable-threads = posix –with-gxx-include-dir = / usr / include / c ++ / 4.6 –libdir = / usr / lib –enable-nls –with-sysroot = / –enable-clocale = gnu –enable-libstdcxx-debug –enable-libstdcxx-time = yes –enable-gnu-unique-object –enable-plugin –enable-objc-gc –enable-objetivos = todos –disable-werror –with-arch-32 = i686 –with-tune = genérico –enable-Check = lanzamiento –build = i686-linux- gnu –host = i686-linux-gnu –target = i686-linux-gnu Modelo de hebra: posix gcc versión 4.6.3


## Macros de tiempo de compilación usando la opción -D

La opción del compilador D se puede usar para definir macros de tiempo de compilación en el código.

Aquí hay un ejemplo :
```C
#include <stdio.h>

int main (nulo)
{
#ifdef MY_MACRO
  printf ("\ n Macro definida \ n");
#terminara si
  char c = -10;
  // Imprime la cadena
   printf ("\ n Las cosas geek [% d] \ n", c);
   return 0;
}

La opción del compilador -D se puede utilizar para definir la macro MY_MACRO desde la línea de comandos.

$ gcc -Wall -DMY_MACRO main.c -o main
$ ./main

Macro definida

Las cosas geek [-10]

Convierta las advertencias en errores con la opción -Werror

A través de esta opción, cualquier advertencia de que gcc podría informar se convierte en error.

Aquí hay un ejemplo :

#include <stdio.h>

int main (nulo)
{
  char c;
  // Imprime la cadena
   printf ("\ n Las cosas geek [% d] \ n", c);
   devuelve 0;
}

La compilación del código anterior debería generar advertencias relacionadas con la variable indefinida c y esto debería convertirse en error mediante la opción -Werror.

$ gcc -Wall -Werror main.c -o main
main.c: En función 'main':
main.c: 7: 10: error: 'c' se usa sin inicializar en esta función [-Werror = sin inicializar]
cc1: todas las advertencias se tratan como errores

Opciones de gcc a través de un archivo usando la opción @

Las opciones para gcc también se pueden proporcionar a través de un archivo. Esto se puede hacer usando la opción @ seguida del nombre del archivo que contiene las opciones. Más de una opción está separada por un espacio en blanco.

Aquí hay un ejemplo :

$ cat opt_file
-Wall -omain

Opt_file contiene las opciones.

Ahora compile el código proporcionando opt_file junto con la opción @.

$ gcc main.c @opt_file
main.c: En la función "main":
main.c: 6: 11: advertencia: "i" se utiliza sin inicializar en esta función [-Wuninitialized]

$ ls main
main

Etiquetas: ,

Categorías:

Actualizado: