предупреждение: несовместимые неявное объявление встроенная функция ‘АБВ’



Я получаю ряд этих предупреждений при компиляции нескольких двоичных файлов:



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’


чтобы попытаться решить эту проблему, я добавил



#include <stdlib.h>


в верхней части файлов C, связанных с этим предупреждением, в дополнение к компиляции со следующими флагами:



CFLAGS = -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc


Я использую GCC 4.1.2:



$ gcc --version
gcc (GCC) 4.1.2 20080704


что я должен сделать, чтобы решить эти предупреждения?

887   4  

4 ответов:

в C использование ранее необъявленной функции представляет собой неявное объявление функции. В неявном объявлении тип возвращаемого значения int если я правильно помню. Теперь GCC имеет встроенные определения для некоторых стандартных функций. Если неявное объявление не соответствует встроенному определению, вы получаете это предупреждение.

чтобы устранить проблему, вы должны объявить функции перед их использованием; обычно вы делаете это, включая соответствующий заголовок. Я не рекомендуется использовать -fno-builtin-* флаги, если это возможно.

вместо stdlib.h, вы должны попробовать:

#include <string.h>

вот тут strcpy и strncpy определяются, по крайней мере, в соответствии с strcpy(2) man page.

The

в случае некоторых программ, эти ошибки являются нормальными и не должны быть фиксированными.

Я получаю эти сообщения об ошибках при компиляции программы phrap (например). Эта программа содержит код, который изменяет или заменяет некоторые встроенные функции, и когда я включаю соответствующие файлы заголовков для исправления предупреждений, GCC вместо этого генерирует кучу ошибок. Таким образом, исправление предупреждений эффективно нарушает сборку.

Если у вас есть источник как часть дистрибутива, который должен компилироваться нормально, ошибки могут быть нормальными. Обратитесь к документации, чтобы быть уверенным.

вот некоторый код C, который производит вышеупомянутую ошибку:

int main(int argc, char **argv) {
  exit(1);
}

компилируется так на Fedora 17 Linux 64 бит с gcc:

el@defiant ~/foo2 $ gcc -o n n2.c                                                               
n2.c: In function ‘main’:
n2.c:2:3: warning: incompatible implicit declaration of built-in 
function ‘exit’ [enabled by default]
el@defiant ~/foo2 $ ./n 
el@defiant ~/foo2 $ 

сделать предупреждение уходи, добавьте это объявление в верхней части файла:

#include <stdlib.h>

Я встретил эти предупреждения на

Comments

    Ничего не найдено.