2014-04-29 12 views
6

Tôi cố gắng để khai báo một biến toàn cầu config:C: không xác định tham chiếu đến một biến khi sử dụng extern

//general.h 

struct config_t { 
    int num; 
}; 

extern struct config_t config; //The global variable 

Sau đó, tôi xác định biến config trong general.c:

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

struct config_t config = { 
    num = 5; 
}; 

Tuy nhiên, khi tôi cố gắng sử dụng biến toàn cầu 'config' trong chức năng chính của tôi, tôi nhận được lỗi:

undefined reference to `config': 

Chương trình chính:

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

main() { 
    config.num = 10; 
} 

Tại sao lại như vậy?

+0

Bạn có gặp lỗi đó trong quá trình biên soạn hoặc trong khi liên kết không? –

+0

@SergeyL. - Trong khi liên kết – Halona

+0

Để tránh lỗi trình liên kết, _always_ sử dụng _header guards_ '#ifndef MY_HEADER_H #define MY_HEADER_H/* contents */# endif'. Bạn _must_ có điều này trong mỗi tập tin tiêu đề bạn đã từng thực hiện. – Lundin

Trả lời

7

Điều này giống như lỗi trình liên kết. Bạn cần đảm bảo bạn liên kết tệp thực thi của mình đúng cách:

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

Cờ -c hướng dẫn trình biên dịch của bạn chưa liên kết. Để liên kết tệp đối tượng có chứa config cần phải có sẵn tại thời điểm đó.

Các vấn đề liên quan