C: undefined reference auf eine variable bei der Verwendung extern
Ich versuche, deklarieren Sie eine Globale variable config
:
//general.h
struct config_t {
int num;
};
extern struct config_t config; //The global variable
Ich dann definieren config variable in general.c
:
//general.c
#include "general.h"
struct config_t config = {
num = 5;
};
Aber, wenn ich versuche, verwenden Sie die Globale variable 'config' in meiner main-Funktion, bekomme ich die Fehlermeldung:
undefined reference to `config':
Main Programm:
//main.c
#include "general.h"
main() {
config.num = 10;
}
Warum ist das so?
- Sie tun bekommen, die Fehler während der Kompilierung oder während der Verknüpfung?
- Während die Verknüpfung
- Um zu vermeiden, linker Fehler, immer mit header guards
#ifndef MY_HEADER_H #define MY_HEADER_H /* contents */ #endif
. Sie müssen diese in jeder header-Datei, die Sie jemals machen. - Und wie Sergej beantwortet (das ist der relevante Punkt in diesem Fall), vergessen Sie nicht, verknüpfen Sie alle Ihre code zusammen.
- Ein header-guard helfen Ihnen nicht außerhalb einer compilation unit. Also "undefined reference" und "Neudefinition" von
ld
sind meist davon unberührt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser sieht aus wie ein linker-Fehler. Sie müssen sicherstellen, dass Sie eine Verknüpfung der ausführbaren Datei richtig:
Den
-c
- flag weist den compiler nicht auf link noch. Um eine Verknüpfung der Objekt-Datei mitconfig
muss verfügbar sein, in diesem moment.