当前位置: 技术问答>linux和unix
请帮我看看链接错误!
来源: 互联网 发布时间:2015-02-05
本文导语: gcc wt_bkp_show.o wt_bkp_cgi.o wt_bkp_use.o -ldisk -lkvm -lcgicons -lm -o wt_bkp_show 错误提示: wt_bkp_cgi.o(.data+0x0): multiple definition of `gn_backupoption' wt_bkp_show.o(.data+0x0): first defined here wt_bkp_cgi.o(.data+0x20): multiple definition of `...
gcc wt_bkp_show.o wt_bkp_cgi.o wt_bkp_use.o -ldisk -lkvm -lcgicons -lm -o wt_bkp_show
错误提示:
wt_bkp_cgi.o(.data+0x0): multiple definition of `gn_backupoption'
wt_bkp_show.o(.data+0x0): first defined here
wt_bkp_cgi.o(.data+0x20): multiple definition of `bootdisk'
wt_bkp_show.o(.data+0x20): first defined here
wt_bkp_use.o(.data+0x0): multiple definition of `gn_backupoption'
wt_bkp_show.o(.data+0x0): first defined here
wt_bkp_use.o(.data+0x20): multiple definition of `bootdisk'
wt_bkp_show.o(.data+0x20): first defined here
我的头文件只包含了一次,不会出现这几个变量的重复定义,而且即使我在程序中把该变量如gn_bakcupoption注释掉,还是出现这个错误,请教!!!
错误提示:
wt_bkp_cgi.o(.data+0x0): multiple definition of `gn_backupoption'
wt_bkp_show.o(.data+0x0): first defined here
wt_bkp_cgi.o(.data+0x20): multiple definition of `bootdisk'
wt_bkp_show.o(.data+0x20): first defined here
wt_bkp_use.o(.data+0x0): multiple definition of `gn_backupoption'
wt_bkp_show.o(.data+0x0): first defined here
wt_bkp_use.o(.data+0x20): multiple definition of `bootdisk'
wt_bkp_show.o(.data+0x20): first defined here
我的头文件只包含了一次,不会出现这几个变量的重复定义,而且即使我在程序中把该变量如gn_bakcupoption注释掉,还是出现这个错误,请教!!!
|
你是不是把變量定義在頭文件裏面了?
編譯器編譯.c或.cpp文件時是單獨一個一個編譯的,如果它包含什麽頭文件就會全部編譯進來。即如果a.c和b.c都包含了x.h,而x.h中定義了變量,那麽這個變量在a.o和b.o中各有一份。這並不會因爲你在x.h中用了#ifndef ... #define ... #endif而改變。所以連接會出錯。你可以把全局變量定義在.c文件中,例如 int gn_backupoption; 而在.h文件中用 extern int gn_backupoption; 來説明,這樣就只有一份了。
編譯器編譯.c或.cpp文件時是單獨一個一個編譯的,如果它包含什麽頭文件就會全部編譯進來。即如果a.c和b.c都包含了x.h,而x.h中定義了變量,那麽這個變量在a.o和b.o中各有一份。這並不會因爲你在x.h中用了#ifndef ... #define ... #endif而改變。所以連接會出錯。你可以把全局變量定義在.c文件中,例如 int gn_backupoption; 而在.h文件中用 extern int gn_backupoption; 來説明,這樣就只有一份了。