9

I try to declare a global variable config:

//general.h

struct config_t {
    int num;
};

extern struct config_t config;  //The global variable

Then I define config variable in general.c:

//general.c
#include "general.h"

struct config_t config = {
    num = 5;
};

But, when I try to use the global variable 'config' in my main function, I get the error:

undefined reference to `config':

Main program:

//main.c
#include "general.h"

main() {
    config.num = 10;
}

Why is it?

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
Halona
  • 1,475
  • 1
  • 15
  • 26

1 Answers1

10

This looks like a linker error. You need to make sure you link your executable properly:

cc -c general.c
cc -c main.c
cc general.o main.o
./a.out

The -c flag instructs your compiler not to link yet. In order to link the object file containing config needs to be available at that moment.

Sergey L.
  • 21,822
  • 5
  • 49
  • 75