2012-12-09 22 views
0

在我的main.c中,我有int cursor = 0;被廢棄部分'.bss'定義的main.o節'.text'中引用的全局變量

這是後來在一個函數中使用,我使用cursor += 1

當我編譯/鏈接時,我得到一個錯誤:

cursor' referenced in section .text' of main.o: defined in discarded section .bss' of main.o

我是比較新的使用GCC。我以前曾經使用MSVC,但我從來沒有像這樣的錯誤。有什麼我需要添加到鏈接器腳本,因此它不會丟棄BSS部分?

謝謝

+0

當然。您的鏈接器腳本不包含.bss部分。 – tangrs

+2

您是在Unix還是Windows上構建?你有什麼鏈接腳本? –

回答

1

我不確定它是否有幫助。你可以嘗試:

static int cursor = 0; 

你可以嘗試其他的事情是,把:

int cursor; 

隨着全球然後在main()把光標= 0;也許它不喜歡初始化全球?

BSS適用於未初始化的全局變量。所以出於某種原因,我認爲這不是初始化你的遊標變量。因此,將初始化移動到main()例程中可能會修復它。

+1

問題是他的.bss不存在,因爲它被鏈接器腳本排除。 – tangrs

+1

謝謝,它絕對是鏈接器腳本。我加了這一點: \t的.bss:{ \t \t *(BSS) \t} 現在它的工作原理 –