Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C: undefined reference to a variable when using extern

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?

like image 854
Halona Avatar asked Apr 29 '14 14:04

Halona


1 Answers

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.

like image 96
Sergey L. Avatar answered Oct 11 '22 05:10

Sergey L.