Las 10 principales banderas GCC importantes para los geeks de Linux

¡Echemos un vistazo a algunas de las banderas más importantes de GCC! GCC, también conocido como el compilador C y C++ del proyecto GNU, es una herramienta esencial para cualquier geek de Linux que codifique en C/C++ y es probablemente el compilador más utilizado. Como la mayoría de las utilidades de línea de comandos, podemos ampliar aún más las funcionalidades de GCC con la ayuda de banderas. En este módulo, veremos 15 de estas banderas GCC.

Tabla de contenido

Introducción

El compilador GNU C/C++ es una herramienta imprescindible si planea codificar en cualquiera de esos dos idiomas. El compilador tiene muchas opciones para que juegues y pruebes con las que implementa a través de banderas.

Banderas importantes de GCC

Estas son algunas de las banderas importantes de GCC que pueden ser útiles:

1. Nombre el archivo de salida con -o file

Esta bandera nos ayuda a especificar el nombre del ejecutable final producido por GCC. Coloca la salida del ejecutable final en un archivo “ expediente ” como se especifica junto con la bandera.

Si el -O bandera no se proporciona, almacena la salida en un archivo llamado “ a.fuera

                      
$ gcc test.c -o out

                    

Esto almacena el binario ejecutable de salida en un archivo llamado “ fuera

2. Producir información de depuración con -g

Agregando el “ -gramo ” produce información de depuración en el formato nativo del sistema operativo (stabs, COFF, XCOFF o DWARF). Esta información puede ser interpretada por el depurador GNU, que puede ayudarnos durante el proceso de depuración. Esta información adicional hace que la depuración funcione mejor en GDB y ayuda a comprender mejor las cosas en juego.

3. Vincule un programa C con una biblioteca compartida usando -l / -L

Se requiere una combinación de estas dos banderas para vincular su programa C con una biblioteca compartida. La función de las dos banderas es:

  • -l : Indica el nombre de la biblioteca compartida
  • -L : Ubicación de la biblioteca compartida

Para examplepara vincular una biblioteca compartida “ Foo ” guardado en /inicio/usuario/entonces el comando sería :

                      
$ gcc -L/home/user/so -Wall -o test test.c -lfoo

                    

4. Convierta las advertencias en tiempo de compilación en errores con -Werror

A menudo, al compilar un binario, nos encontramos con muchas advertencias que descartamos como triviales. Estas advertencias indicaron posibles lagunas, funciones de seguridad o fallas en el código y el binario producido como resultado de dicho código podría tener errores.

Por lo tanto, para convertir estas advertencias en errores, podemos usar el -Werror bandera. Como resultado, todas las advertencias mostradas durante la compilación se convertirán en errores. Puede ser un poco molesto eliminar todos los errores, pero el resultado sería un ejecutable con menos errores.

5. Habilite todas las advertencias con -Wall

¿Quieres aún más código libre de errores? Prueba el -Muro bandera. Esto habilita todas las advertencias sobre construcciones que algunos usuarios consideran cuestionables y que son fáciles de evitar (o modificar para evitar la advertencia).

los -Muro bandera, combinada con la -Werror flag give se asegura de tener un ejecutable a prueba de errores. Estas banderas lo ayudan a desarrollar prácticas de codificación seguras y escribir código seguro.

6. Producir código independiente de la posición con -fPIC

Esta bandera produce código independiente de la posición, adecuado para enlaces dinámicos y evita cualquier límite en el tamaño de la tabla de compensación global. Esta opción es especialmente útil al crear bibliotecas compartidas. Esto ayuda a que la biblioteca compartida se cargue como cualquier dirección en lugar de una dirección fija.

7. Optimiza el tiempo de compilación -O2/-O3

Optimiza tanto el tiempo de compilación como el rendimiento del código generado. Las dos banderas definen el nivel de optimización de su código para que pueda tener un resultado más óptimo.

8. Compruebe si hay desbordamientos de búfer durante la compilación con -fstack-protector

Esto permite verificaciones de desbordamientos de búfer, como ataques de destrucción de pila. Esto puede contribuir en gran medida a proteger los ataques contra su binario y podría evitar el secuestro del puntero de función y evitar que la pila se sobrescriba con datos maliciosos no deseados.

9. Use tuberías en lugar de archivos temporales con -pipe

Esto le dice al compilador que use conductos en lugar de archivos temporales para la comunicación entre las distintas etapas de la compilación. Esto evita el uso de archivos temporales y acelera el proceso de compilación.

10. Guarda archivos temporales con -save-temps

Cuando esta opción está habilitada, la salida en todas las etapas de compilación se almacena en el directorio actual. Esto incluye el código C original, el código ensamblador, la salida preprocesada, el código compilado y el ejecutable en sí.

                      
$ gcc -save-temps test.c
$ ls
a.out  test.c  test.i  test.o  test.s

                    

Pasar banderas GCC a través de un archivo

Puede almacenar todas las banderas que desee incluir con la ayuda de “ @ ” símbolo. Para example tiene todas las banderas que desea incluir durante la compilación como:

                      
$ cat flags
-Wall -Werror -O3 -save-temps 

                    

Entonces puedes incluir lo mismo con:

                      
$ gcc test.c @flags

                    

Esto puede ser útil cuando desea asegurarse de que todos sus ejecutables tengan algunos estándares comunes o para evitar el dolor de escribir la misma larga lista de archivos una y otra vez.

Conclusión

Por lo tanto, en este módulo vimos algunas de las banderas útiles de GCC. Sin embargo, todavía hay MUCHAS banderas más que puede revisar con el comando man gcc .

Related Posts