¿Cómo puedo compilar sin que las advertencias se traten como errores?

1 minuto de lectura

avatar de usuario
Saurabh Verma

El problema es que el mismo código que compila bien en Windows, no puede compilar en ubuntu. Cada vez que me sale este error:

cc1: las advertencias se tratan como errores

Ahora, es una gran base de código y no me gusta corregir todas las advertencias.

¿Hay alguna forma de compilar con éxito a pesar de las advertencias?

  • Recomiendo encarecidamente tratar de arreglar las advertencias. Si no inmediatamente, entonces gradualmente. Una vez que te deshagas de -Werrorpuede volver a agregarlo por directorio, después de haber eliminado las advertencias.

    – ugoren

    19 de julio de 2012 a las 13:04

  • Incluso si compila con éxito, es posible que no se ejecute de la manera esperada. Algunas personas han escrito código que funciona bien en Windows pero falla inmediatamente en Linux.

    –Dennis Meng

    19 de julio de 2012 a las 16:39

  • Gracias a todos por sus útiles comentarios y respuestas. De acuerdo con el requisito, parece que tengo que arreglar todas las advertencias, que he comenzado. Pero ahora la advertencia que recibo es de sqlite3.c: suponiendo que no se produce un desbordamiento firmado al suponer que (X – c)

    – Saurabh Verma

    20 de julio de 2012 a las 7:22


avatar de usuario
daniel pescador

Claro, busca donde -Werror está establecido y eliminar esa bandera. Entonces las advertencias serán solo advertencias.

  • Gracias Daniel, pero no hay un indicador de error establecido en mi proyecto. ¿Debería buscarlo en otro lado?

    – Saurabh Verma

    19 de julio de 2012 a las 12:53

  • En algún lugar debe establecerse, de forma predeterminada, ningún compilador que conozco trata las advertencias como errores. Si no puede encontrarlo, puede intentar anularlo con -Wno-error, como sugirió Nightcracker. Eso debería funcionar a menos que el -Werror se pasa después de las banderas que estableció en CFLAGS en el archivo MAKE.

    –Daniel Fischer

    19 de julio de 2012 a las 12:59

avatar de usuario
orlp

Puede hacer que todas las advertencias sean tratadas como tales usando -Wno-error. Puede hacer que las advertencias específicas se traten como tales usando -Wno-error=<warning name> dónde <warning name> es el nombre de la advertencia que no desea que se trate como un error.

Si quieres por completo deshabilitar todas las advertencias, utilice -w (no recomendado).


Fuente: 3.8 Opciones para solicitar o suprimir advertencias

Solución:

CFLAGS=-Wno-error ./configure

avatar de usuario
andrea araldo

Remover -Werror de sus archivos Make o CMake, como se sugiere en esta publicación.

avatar de usuario
Marlab

los -Muro y -Werror las opciones del compilador pueden causarlo. Compruebe si se utilizan en la configuración del compilador.

avatar de usuario
Pedro Mortensen

Si está compilando el kernel de Linux:

Por ejemplo, si desea deshabilitar la advertencia de que “variable no utilizada pero configurada” se tratará como un error. Puede agregar una declaración:

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

en su Makefile.

avatar de usuario
Pedro Mortensen

Gracias por todas las sugerencias útiles. Finalmente me aseguré de que no hubiera advertencias en mi código, pero nuevamente estaba recibiendo esta advertencia de SQLite 3:

Asumiendo que el desbordamiento firmado no ocurre cuando se asume que (X – c)

que arreglé agregando el CFLAG -fno-estricto-desbordamiento.

  • Hay muchas advertencias para indicarle construcciones problemáticas en su código. Deshabilitarlos te permitirá seguir adelante a corto plazo, pero nunca sabrás si estos problemas volverán a atormentarte a largo plazo.

    – Benjamín Banner

    20 de julio de 2012 a las 11:00

  • Sí, tiene usted razón. Quise decir que me aseguré de que mi código esté libre de advertencias (no he deshabilitado todas las advertencias)

    – Saurabh Verma

    20 de julio de 2012 a las 14:26

¿Ha sido útil esta solución?