programing

경고: 내장 함수 'xyz'에 대한 호환되지 않는 암묵적 선언입니다.

bestcode 2022. 7. 10. 21:20
반응형

경고: 내장 함수 'xyz'에 대한 호환되지 않는 암묵적 선언입니다.

몇 개의 바이너리를 컴파일 할 때 다음과 같은 경고가 표시됩니다.

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

이러한 경고를 해결하려면 어떻게 해야 합니까?

C에서, 이전에 선언되지 않은 함수를 사용하는 것은 함수의 암묵적인 선언을 구성한다.암묵적인 선언에서 반환 유형은 다음과 같습니다.int내 기억이 맞다면.GCC에는 몇 가지 표준 함수에 대한 정의가 포함되어 있습니다.암묵적인 선언이 삽입 정의와 일치하지 않으면 이 경고가 표시됩니다.

이 문제를 해결하려면 함수를 사용하기 전에 선언해야 합니다.보통 적절한 헤더를 포함하여 선언합니다.를 사용하지 않을 것을 권장합니다.-fno-builtin-*플래그를 지정합니다.

stdlib.h 대신 다음을 시도해 보십시오.

#include <string.h>

바로 그곳이다strcpy그리고.strncpy정의됩니다.적어도,strcpy(2) man 페이지.

exit함수는 stdlib.h에 정의되어 있기 때문에 거기서 무슨 일이 일어나고 있는지 알 수 없습니다.

다음은 상기 오류를 발생시키는 C 코드입니다.

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

GCC를 탑재한 Fedora 17 Linux 64비트에서는 다음과 같이 컴파일됩니다.

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>

이 경고들을 받은 것은mempcpy기능.Man 페이지에는 이 함수는 GNU 확장자이며 개요는 다음과 같이 표시됩니다.

#define _GNU_SOURCE
#include <string.h>

언제#define에 앞서 제 소스에 추가되어 있습니다.#includeGNU 확장 선언이 표시되며 경고가 사라집니다.

일부 프로그램의 경우, 이러한 오류는 정상이며 수정해서는 안 됩니다.

프로그램 phrap을 컴파일할 때 다음과 같은 에러 메시지가 나타납니다(예를 들어).이 프로그램에는 내장 함수를 수정하거나 대체하는 코드가 포함되어 있습니다.또한 경고를 수정하기 위해 적절한 헤더 파일을 포함하면 GCC는 대신 다수의 오류를 생성합니다.따라서 경고를 수정하면 구축이 사실상 중단됩니다.

정상적으로 컴파일 되는 배포의 일부로서 소스를 취득했을 경우, 에러는 정상인 경우가 있습니다.확실히 하려면 , 메뉴얼을 참조해 주세요.

언급URL : https://stackoverflow.com/questions/977233/warning-incompatible-implicit-declaration-of-built-in-function-xyz

반응형