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 #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