2013-01-16 198 views

回答

1

GOT代表全局偏移表。 GOT是一個128K字節的指向外部符號的指針表。每個鏈接單元都有自己的GOT,用於使鏈接單元訪問其他鏈接單元中的符號。這在See MIPS Run的第16章中有更詳細的解釋。

看起來您嘗試鏈接的代碼引用了太多(>〜32k)外部符號。

+0

我是一名建築工程師,對編碼知之甚少。如果你能告訴我一種「強制鏈接器通過一個簡單的測試用例產生這個錯誤」的方法,我將不勝感激。事實上,binutils的貢獻者正在尋找一個簡單的測試用例 - http://sourceware.org/ ml/binutils/2013-01/msg00104.html - 爲此問題提供補丁/修復。 – venkrao

+1

GOT是指向在特定對象文件中聲明爲'extern'的指針的表。您可以編寫一個腳本來生成聲明大約32,000個外部符號的「C」代碼,並編譯和鏈接導致該錯誤。 「See MIPS Run」一書在這裏會有所幫助。 – markgz

+0

謝謝。我試過了,但也許,我做了錯誤的事,而且我無法複製。 Sourceware的人似乎取得了一些進展。 http://sourceware-org.1504.n7.nabble.com/invocation-of-mips-elf-multi-got-can-cause-not-enough-GOT-space-for-local-GOT-entries-tc218026。 HTML我在這裏離開這個鏈接。希望如果有人發現相同的問題,他們會知道更多的細節。 – venkrao

相關問題