C: référence non définie à une variable lors de l'utilisation extern
J'essaie de déclarer une variable globale config
:
//general.h
struct config_t {
int num;
};
extern struct config_t config; //The global variable
Puis-je définir la variable de config dans general.c
:
//general.c
#include "general.h"
struct config_t config = {
num = 5;
};
Mais, lorsque j'essaie d'utiliser la variable globale "config" dans ma fonction principale, j'obtiens l'erreur:
undefined reference to `config':
Programme principal:
//main.c
#include "general.h"
main() {
config.num = 10;
}
Pourquoi est-il?
Avez-vous d'erreur lors de la compilation ou au cours de la liaison?
Durant l'édition de liens
Pour éviter les erreurs d'édition de liens, toujours utilisation en-tête de gardes
Et comme sergey répondu (ce qui est le point pertinent dans ce cas), n'oubliez pas de lier l'ensemble de votre code.
Un en-tête de la garde ne vous aidera pas à l'extérieur d'une unité de compilation. Donc "undefined reference" et "redéfinition" de
Durant l'édition de liens
Pour éviter les erreurs d'édition de liens, toujours utilisation en-tête de gardes
#ifndef MY_HEADER_H #define MY_HEADER_H /* contents */ #endif
. Vous ont ce dans chaque en-tête de fichier de votre vie.Et comme sergey répondu (ce qui est le point pertinent dans ce cas), n'oubliez pas de lier l'ensemble de votre code.
Un en-tête de la garde ne vous aidera pas à l'extérieur d'une unité de compilation. Donc "undefined reference" et "redéfinition" de
ld
sont pour la plupart pas affectés par elle.OriginalL'auteur Halona | 2014-04-29
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à une erreur de l'éditeur de liens. Vous devez vous assurer que vous lier votre exécutable correctement:
La
-c
drapeau ordonne à ton compilateur ne pas faire de lien encore. Afin de lier le fichier objet contenantconfig
doit être disponible à ce moment.OriginalL'auteur Sergey L.