Beim Kompilieren einiger Binärdateien werden einige dieser Warnungen angezeigt:
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 dies zu beheben, 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:
CFLAGS = -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc
Ich benutze GCC 4.1.2:
$ gcc --version
gcc (GCC) 4.1.2 20080704
Was kann ich tun, um diese Warnungen zu beheben?
c
gcc
gcc-warning
Alex Reynolds
quelle
quelle
Antworten:
In C stellt die Verwendung einer zuvor nicht deklarierten Funktion eine implizite Deklaration der Funktion dar. In einer impliziten Deklaration ist der Rückgabetyp,
int
wenn ich mich richtig erinnere. Jetzt hat GCC integrierte Definitionen für einige Standardfunktionen. Wenn eine implizite Deklaration nicht mit der integrierten Definition übereinstimmt, wird diese Warnung angezeigt.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
-fno-builtin-*
Flags möglichst nicht zu verwenden .Anstelle von stdlib.h sollten Sie Folgendes versuchen:
Dort werden
strcpy
undstrncpy
werden zumindest gemäß derstrcpy
(2) Manpage definiert.Die
exit
Funktion ist jedoch in stdlib.h definiert , sodass ich nicht weiß, was dort vor sich geht.quelle
Bei einigen Programmen sind diese Fehler normal und sollten nicht behoben werden.
Ich erhalte diese Fehlermeldungen beim Kompilieren des Programms phrap (zum Beispiel). Dieses Programm enthält zufällig Code, der einige integrierte Funktionen ändert oder ersetzt. Wenn ich die entsprechenden Header-Dateien zur Behebung der Warnungen einbinde, generiert GCC stattdessen eine Reihe von Fehlern. Das Beheben der Warnungen unterbricht also effektiv den Build.
Wenn Sie die Quelle als Teil einer Distribution erhalten haben, die normal kompiliert werden soll, sind die Fehler möglicherweise normal. Konsultieren Sie die Dokumentation, um sicherzugehen.
quelle
Hier ist ein C-Code, der den oben genannten Fehler erzeugt:
So kompiliert unter Fedora 17 Linux 64 Bit mit gcc:
Fügen Sie diese Deklaration oben in der Datei hinzu, damit die Warnung nicht mehr angezeigt wird:
quelle
Ich habe diese Warnungen auf
mempcpy
Funktion getroffen. Manpage sagt, dass diese Funktion eine GNU-Erweiterung ist und Synopse zeigt:Wenn
#define
vor dem zu meiner Quelle hinzugefügt wird#include
, werden Deklarationen für die GNU-Erweiterungen sichtbar gemacht und Warnungen verschwinden.quelle