Warnung: inkompatible implizite Deklaration der integrierten Funktion „xyz“
Lesezeit: 3 Minuten
Alex Reynolds
Ich erhalte eine Reihe dieser Warnungen, wenn ich einige Binärdateien kompiliere:
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’
Um zu versuchen, dies zu lösen, habe ich hinzugefügt
#include <stdlib.h>
oben in den C-Dateien, die dieser Warnung zugeordnet sind, zusätzlich zum Kompilieren mit den folgenden Flags:
Leider habe ich keine Berechtigung, diesen Code zu reposten.
– Alex Reynolds
10. Juni 2009 um 18:32 Uhr
Ville Laurikari
In C stellt die Verwendung einer zuvor nicht deklarierten Funktion eine implizite Deklaration der Funktion dar. Bei einer impliziten Deklaration ist der Rückgabetyp int wenn ich mich recht erinnere. Jetzt hat GCC eingebaute Definitionen für einige Standardfunktionen. Wenn eine implizite Deklaration nicht mit der integrierten Definition übereinstimmt, erhalten Sie diese Warnung.
Um das Problem zu beheben, müssen Sie die Funktionen deklarieren, bevor Sie sie verwenden. Normalerweise tun Sie dies, indem Sie den entsprechenden Header einfügen. Ich empfehle, die nicht zu verwenden -fno-builtin-* Fahnen ggf.
Anstatt von stdlib.hdu solltest es versuchen:
#include <string.h>
Das ist wo strcpy und strncpy definiert sind, zumindest gem strcpy(2) Handbuchseite.
Das exit Funktion ist definiert in stdlib.haber ich weiß nicht, was da los ist.
Danke, ich muss ungefähr 20 .c-Dateien bereinigen und habe das Hinzufügen einiger Header verpasst.
– Alex Reynolds
10. Juni 2009 um 22:42 Uhr
Mein Problem beim Kompilieren eines C-Programms zum Überprüfen des Virtualisierungstyps (Xen HVM/KVM/VMware/Bare Metal) wurde behoben, cool! Vielen Dank.
– Terry Wang
16. Februar 2014 um 0:05 Uhr
Bei einigen Programmen sind diese Fehler normal und sollten nicht behoben werden.
Diese Fehlermeldungen bekomme ich zB beim Kompilieren des Programms phrap. Dieses Programm enthält zufällig Code, der einige eingebaute Funktionen modifiziert oder ersetzt, und wenn ich die entsprechenden Header-Dateien einfüge, um die Warnungen zu beheben, generiert GCC stattdessen eine Reihe von Fehlern. Das Beheben der Warnungen unterbricht also effektiv den Build.
Wenn Sie den Quellcode als Teil einer Distribution erhalten haben, die normal kompiliert werden sollte, sind die Fehler möglicherweise normal. Konsultieren Sie die Dokumentation, um sicherzugehen.
Erich Leschinski
Hier ist ein C-Code, der den oben genannten Fehler erzeugt:
int main(int argc, char **argv) {
exit(1);
}
So kompiliert auf Fedora 17 Linux 64 Bit mit 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 $
Um die Warnung zu entfernen, fügen Sie diese Deklaration am Anfang der Datei hinzu:
#include <stdlib.h>
Lies die Frage; Er hat bereits das Hinzufügen von stdlib.h erwähnt. Aber das reicht nur für den Exit, nicht für die String-Funktionen.
– Matt Fletcher
4. Juli 2014 um 8:39 Uhr
Obwohl es mir hier geholfen hat.
– Al-Bara El-Hag
29. November 2020 um 4:04 Uhr
Ich traf diese Warnungen auf mempcpy Funktion. Die Manpage besagt, dass diese Funktion eine GNU-Erweiterung ist, und die Zusammenfassung zeigt:
#define _GNU_SOURCE
#include <string.h>
Wann #define wird meiner Quelle vor dem hinzugefügt #includeDeklarationen für die GNU-Erweiterungen werden sichtbar gemacht und Warnungen verschwinden.
14250800cookie-checkWarnung: inkompatible implizite Deklaration der integrierten Funktion „xyz“yes
Kannst du den fehlgeschlagenen Code posten?
– Matt K
10. Juni 2009 um 18:04 Uhr
Leider habe ich keine Berechtigung, diesen Code zu reposten.
– Alex Reynolds
10. Juni 2009 um 18:32 Uhr