Recibo varias de estas advertencias al compilar algunos binarios:
warning: incompatible implicit declaration of built-in function ‘strcpy’
warning: incompatible implicit declaration of built-in function ‘strlen’
warning: incompatible implicit declaration of built-in function ‘exit’
Para tratar de resolver esto, he agregado
#include <stdlib.h>
en la parte superior de los archivos C asociados con esta advertencia, además de compilar con los siguientes indicadores:
CFLAGS = -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc
Estoy usando GCC 4.1.2:
$ gcc --version
gcc (GCC) 4.1.2 20080704
¿Qué debo hacer para resolver estas advertencias?
c
gcc
gcc-warning
Alex Reynolds
fuente
fuente
Respuestas:
En C, el uso de una función no declarada anteriormente constituye una declaración implícita de la función. En una declaración implícita, el tipo de retorno es
int
si recuerdo correctamente. Ahora, GCC tiene definiciones incorporadas para algunas funciones estándar. Si una declaración implícita no coincide con la definición incorporada, recibirá esta advertencia.Para solucionar el problema, debe declarar las funciones antes de usarlas; normalmente haces esto incluyendo el encabezado apropiado. Recomiendo no usar las
-fno-builtin-*
banderas si es posible.En lugar de stdlib.h , deberías probar:
Ahí es donde
strcpy
ystrncpy
se definen, al menos de acuerdo con lastrcpy
(2) página de manual.Sin embargo, la
exit
función está definida en stdlib.h , así que no sé qué está pasando allí.fuente
En el caso de algunos programas, estos errores son normales y no deben repararse.
Recibo estos mensajes de error al compilar el programa phrap (por ejemplo). Este programa contiene código que modifica o reemplaza algunas funciones integradas, y cuando incluyo los archivos de encabezado apropiados para corregir las advertencias, GCC genera un montón de errores. Entonces, arreglar las advertencias efectivamente rompe la construcción.
Si obtuvo la fuente como parte de una distribución que debería compilarse normalmente, los errores podrían ser normales. Consulte la documentación para estar seguro.
fuente
Aquí hay un código C que produce el error mencionado anteriormente:
Compilado así en Fedora 17 Linux 64 bit con gcc:
Para que la advertencia desaparezca, agregue esta declaración al principio del archivo:
fuente
Encontré estas advertencias en
mempcpy
función. La página de manual dice que esta función es una extensión de GNU y la sinopsis muestra:Cuando
#define
se agrega a mi fuente antes de#include
, las declaraciones para las extensiones GNU se hacen visibles y las advertencias desaparecen.fuente