extern變數但還是undefined的處理方式

我遇到過很多次這種狀況, 但是我都沒記下來導致每每都要犯這問題
狀況是這樣的, 如果今天我們寫了兩個檔案需要透過變數傳遞訊息
ex: file1.c , file2.c
file1裡面宣告global 變數 g_state, 以記錄裝置狀態
而且 file2也需要知道此global 變數 g_state
這樣的話就會在
file1.c

int g_state = 0;

file2.c

extern int g_state;

通常這樣就OK了!
但是有時候就是會發生以下undefined狀況:

ERROR: “g_state” [drivers/net/wireless/bcm4329/bcm4329.ko] undefined!
make[2]: *** [__modpost] Error 1
make[1]: *** [modules] Error 2
make: *** [sub-make] Error 2

我google了一下
找到這個資訊 http://bbs.chinaunix.net/thread-1918580-1-1.html

原來解法很容易:
file2.c多加一行EXPORT_SYMBOL_GPL就可以

extern int g_state;
EXPORT_SYMBOL_GPL(g_state);

發表迴響