doctor watson
Estoy tratando de construir GCC para usar con un AVR microcontrolador y avr-ada, y me encontré con un obstáculo causado por mi compilador habitual que era demasiado exigente con la versión que necesitaba para el AVR. Recibo la siguiente advertencia, que a su vez hace que GCC o Make informen un error:
gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada
-I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2
¿Hay alguna manera de instruir a GCC o Make para que no fallen en las advertencias?
Probar make -k
en lugar de solo make
. Eso ‘continuará’ en lugar de detenerse.
Jacobo
Como alternativa a sumergirse en el sistema de compilación, intente configurar -Wno-error
en CFLAGS, lo que debería poder hacer a través del entorno (o en el momento de la configuración, si usa el sistema de compilación GNU).
Simón Wright
El activador aquí es -gnatpg (en realidad, -gnatg): este es el “modo de implementación GNAT (utilizado para compilar unidades GNAT)”. -gnatp significa “suprimir todos los controles”.
No estoy seguro del efecto completo de -gnatg, aunque ciertamente hace que las advertencias se traten como errores, como -Werror, en cualquier caso mientras se construye el compilador; Creo recordar haber visto advertencias no fatales mientras construía el RTS.
Una posibilidad sería compilar exp_ch5.adb a mano sin -gnatg; el comando que enumera se emitió en gcc/, por lo que
$ cd gcc
$ gcc -c -g -O2 -gnatp -gnata -nostdinc -I- -I. -Iada -I../../gcc/ada \
../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
Luego retrocede un nivel y vuelve a “hacer”.
Este es un compilador cruzado, por lo que no necesitará (¡espero!) Repetir esto para las tres etapas de una compilación completa.
-
Gracias, su solución me permitió superar el error anterior. Tengo más advertencias del compilador de Ada, ¡pero seguiré ahora!
– Dra. Watson
11 de marzo de 2010 a las 12:51
-
-
@PeterMortensen, sí.
– Simón Wright
23 oct a las 15:54
ZelluX
parece que -Werror la bandera se establece en el Makefile. Tal vez pueda buscar las opciones de CFLAGS en el Makefile y eliminar el indicador -Werror. La bandera Werror convertirá todas las advertencias en errores.
ezpz
En general, no es una buena idea ignorar las advertencias de su compilador. Sin embargo, si se trata de una parte de un proceso de creación más grande, es probable que haya un -Werror
indicador insertado anteriormente en la secuencia. Empieza por buscar eso.
Después de mirar alrededor, parece haber una gran cantidad de banderas para controlar las advertencias mientras se compila el código Ada. Por ejemplo, -gnatwF
voluntad Suprimir advertencias en formularios no referenciados de acuerdo a esta guía. Posiblemente, el interruptor que necesita se puede encontrar en la lista proporcionada allí.
-
Sí, nada de lo que pegó hubiera dado lugar a que se activara -Werror. Tenía que ser anterior al extracto.
– Tim Publicar
10 de marzo de 2010 a las 3:49
-
Sé que no es una buena idea, e intenté construir una versión anterior de gcc/gnat (gcc-4.3.2) solo para poder construir el AVR gcc/gnat (también gcc-4.3.2), pero estaba ejecutando en el mismo problema exacto allí también. Después de hablar con el propietario del proyecto, me dijo que el compilador Ada de mi sistema (gcc-4.3.4) “huele demasiado nuevo” para el código base, y mis opciones eran piratear el código fuente o intentar anular la falla o la advertencia.
– Dra. Watson
10 de marzo de 2010 a las 14:01
-
Bueno, recuerdo haber tratado con Ada por un breve tiempo y, para mí, el enfoque tendría que ser aumentar la construcción. Según recuerdo, Ada es muy meticulosa con las cosas.
– ezpz
10 de marzo de 2010 a las 14:52
-
De nuevo, estoy de acuerdo con lo que dices. Probaré algunas de las opciones que enumeraste, así como otras en este hilo cuando llegue a casa hoy, pero estoy aprendiendo a usar solo la versión de Windows, ya que puedo obtener fácilmente un binario y ponerme a trabajar.
– Dra. Watson
10 de marzo de 2010 a las 15:19
Blog de Bob
En gcc configure puedes agregar --disable-werror
.
Aunque es recomendable buscar primero un parche adecuado.
-
Sí, nada de lo que pegó hubiera dado lugar a que se activara -Werror. Tenía que ser anterior al extracto.
– Tim Publicar
10 de marzo de 2010 a las 3:49
-
Sé que no es una buena idea, e intenté construir una versión anterior de gcc/gnat (gcc-4.3.2) solo para poder construir el AVR gcc/gnat (también gcc-4.3.2), pero estaba ejecutando en el mismo problema exacto allí también. Después de hablar con el propietario del proyecto, me dijo que el compilador Ada de mi sistema (gcc-4.3.4) “huele demasiado nuevo” para el código base, y mis opciones eran piratear el código fuente o intentar anular la falla o la advertencia.
– Dra. Watson
10 de marzo de 2010 a las 14:01
-
Bueno, recuerdo haber tratado con Ada por un breve tiempo y, para mí, el enfoque tendría que ser aumentar la construcción. Según recuerdo, Ada es muy meticulosa con las cosas.
– ezpz
10 de marzo de 2010 a las 14:52
-
De nuevo, estoy de acuerdo con lo que dices. Probaré algunas de las opciones que enumeraste, así como otras en este hilo cuando llegue a casa hoy, pero estoy aprendiendo a usar solo la versión de Windows, ya que puedo obtener fácilmente un binario y ponerme a trabajar.
– Dra. Watson
10 de marzo de 2010 a las 15:19
Pedro Mortensen
Ponga “advertencias de pragma (apagado, “…”)” en las partes ofensivas de su código.
-
El enlace está roto: “La página que estás buscando no se encuentra”
-Peter Mortensen
25 oct a las 20:23
-
Re “
pragma warnings
“: ¿Quieres decir algo como#pragma GCC diagnostic
?-Peter Mortensen
25 oct a las 20:27
No creo que ninguna de las opciones de depuración resulte en el tratamiento de las advertencias como errores (al menos no que yo pudiera encontrar), ¿es ese el resultado completo?
– Tim Publicar
10 de marzo de 2010 a las 3:15
Normalmente (cuando no se usa
-gnatg
para aplicar todas las comprobaciones necesarias para la construcción de un compilador), GNAT (Ada en GCC) utiliza-gnatwe
tratar las advertencias como errores, y-gnatwn
para cancelar eso– Simón Wright
23 oct a las 15:58