2011-04-04 32 views
24

Estoy intentando compilar un archivo de Pro * C en gcc y estoy recibiendo este error:make: *** [] Error 1 Error

make: *** [MedLib_x.o] Error 1 

Este es el comando impresa por marca:

/usr/bin/gcc -g -fPIC -m64 -DSS_64BIT_SERVER -I/home/med/src/common - 
I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/demo 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public 
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/xdk/include INCLUDE=/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public -lnapi -ltabs -c MedLib_x.c 

Ayúdenme por qué viene este error? Aunque el archivo de objeto también se crea.

+0

Sin más detalles del mensaje de error es difícil saber cuál es incorrecto – fnokke

+0

El error que ha citado debe haber sido precedido por un error de GCC, favor de mencionarlo también. – DarkDust

+0

Gracias por su respuesta. ¿Qué más detalles necesita, por favor explique? – QMG

Respuesta

16

De GNU Haga el apéndice de error, como ve, esto no es un error de Hacer, sino un error proveniente de gcc.

‘[foo] Error NN’ ‘[foo] signal description’ These errors are not really make errors at all. They mean that a program that make invoked as part of a recipe returned a non-0 error code (‘Error NN’), which make interprets as failure, or it exited in some other abnormal fashion (with a signal of some type). See Errors in Recipes. If no *** is attached to the message, then the subprocess failed but the rule in the makefile was prefixed with the - special character, so make ignored the error.

Para atacar el problema, se requiere el mensaje de error de gcc. Pegue el comando en el Makefile directamente en la línea de comando y vea lo que dice gcc. For more details on Make errors click here.

+0

Gracias por su respuesta. No puedo vincular el error y las cosas escritas en la página con respecto a Hacer errores. – QMG

11

Obtuve la misma cosa. Ejecutando "make" y falla solo con este mensaje.

% make 
make: *** [all] Error 1 

Esto fue causado por un comando en una regla que termina con un estado de salida distinto de cero. P.ej. imaginar el siguiente (estúpida) Makefile:

all: 
     @false 
     echo "hello" 

Este sería un fracaso (sin imprimir "hola") con el mensaje anterior ya false termina con el código de salida 1.

En mi caso, yo estaba tratando de ser inteligente y hacer una copia de seguridad de un archivo antes de procesarlo (para poder comparar el archivo recién generado con el anterior). Hice esto por tener una regla en mi Make que se veía así:

@[ -e [email protected] ] && mv [email protected] [email protected] 

... sin darse cuenta de que si no existe el archivo de destino, entonces la construcción anterior se cerrará (sin ejecutar el comando mv) con estado de salida 1, y por lo tanto, los comandos subsiguientes en esa regla no se pudieron ejecutar. Reescribiendo mi línea defectuosa a:

@if [ -e [email protected] ]; then mv [email protected] [email protected]; fi 

Resolvió mi problema.

+0

Otra opción sería '@ [! -e $ @] || mv $ @ $ @.bak' – T0xicCode

+0

¡Absolutamente! '@ [! -e $ @] || mv $ @ $ @. bak' también funcionaría! Pero me duele el cerebro solo para tratar de leer más allá de las dobles negaciones, por lo que, por consideración a mis compañeros programadores (es decir, a mí mismo, un año en el futuro), prefiero usar el enunciado 'if', un poco más largo. – zrajm

0

En mi caso, había una variable estática que no se inicializó. Cuando lo inicialicé, el error fue eliminado. No sé la lógica detrás de eso, pero funcionó para mí. Sé que es un poco tarde, pero otras personas con problemas similares podrían obtener ayuda.

3

veces, usted recibirá una gran cantidad de salidas del compilador con muchas advertencias y hay una línea de producción que dice "error: usted hizo algo mal aquí" pero aún había un error. Un ejemplo de esto es un archivo de encabezado faltante: el compilador dice algo como "no such file" pero no "error: no such file", luego sale con un código de salida distinto de cero algún tiempo después (tal vez después de muchas advertencias). ¡Haz una bomba con un mensaje de error en estos casos!

Cuestiones relacionadas