2011-09-15 404 views
24

我剛安裝EclipseCDTMinGW。 所有的環境變量設置,包括等嘗試運行一個hello世界,一切似乎都很好。Eclipse CDT「符號NULL無法解析」

我試圖加載C項目,我在電腦前了,似乎加載樣樣精,但我得到與NULL符號以下錯誤:

Symbol 'NULL' could not be resolved 

任何見解?謝謝!

回答

31

NULL通常在stddef.h中定義。該文件通常也包含在stdlib.h和stdio.h中。

而且,你總是可以做到這一點:

#ifndef NULL 
#define NULL ((void *) 0) 
#endif 
+0

其實我不認爲標準標題包含對方;定義「NULL」的幾個頭中的每一個都是獨立的。你可以自己定義它,但沒有理由這樣做。只需包含標題即可。 –

+1

@Keith - 也許在某些系統上,但在Linux上,stdlib.h包含stddef.h。這裏是一個谷歌代碼搜索的例子 - [http://google.com/codesearch#XAzRy8oK4zA/libc/include/stdlib.h&q=stdlib.h&type=cs] –

+0

好吧,但效果就好像它不包括它。這個: '#include int main(void){ offsetof(struct {int i;},i); return 0; }' 無法編譯。 –

0

我在這裏尋找答案這一點,因爲我發現CDT有時會失敗,解決標準庫的頭。我仍然不知道爲什麼以及如何重現錯誤。只需重新啓動CDT,全部解決。

5

我有同樣的問題:我的生成文件運行良好,但我從Eclipse CDT視圖中得到類似你的錯誤。

我關閉了當前的項目,我打開了一個新的「使用現有代碼的Makefile項目」,指定了我的項目的正確位置源位置。在此之後,我檢查了: 右鍵項目/ C++ general /路徑和符號/ Gnu C++/include目錄不是空的,並且包含我的項目的正確路徑。

然後,我重建了索引(右鍵/索引/重建)。

此外,我使用Eclipse CDT 7而不是Eclipse CDT 8,因爲CDT8有時會給我編譯GUI的錯誤,但無法解決,儘管makefile很好。

+0

+1一直在尋找這個解決方案。 – chux

14

正如鮑勃提到的,我修正錯誤只是重建索引

  1. 權項目
  2. 選擇「索引」
  3. 選擇「重建」
0

我是有這個同樣的錯誤,我通過右鍵單擊您的項目來解決它,將鼠標懸停在索引選項卡上,然後單擊重建。之後我的錯誤就消失了。

2
  • 的原因是:在stddef.h定義

NULL,但stddef.hxxx/include/linuxxxx/include

- 即使你已經添加的MingW的xxx/include,仍然無法找到NULL

    >
  • 解決方法是:

添加您的MingW的include/linux路徑到項目

  • 引薦

(1)我的XScale交叉編譯的include/linux路徑的例子:/opt/crosscompile/xscale/gcc-4.6.0-glibc-2.9/arm-xscale-linux-gnueabi/sysroot/usr/include/linux

added GNU C++ include linux path

(2 )我的帖子:Ubuntu Eclipse: Symbol ‘NULL’ could not be resolved

1

我只是修復了這樣的錯誤,並認爲沒有人發現這個解決方案,我會發布它。我發現stdlib在我的AVR GCC編譯器中聲明瞭NULL作爲___need_NULL。這在Eclipse IDE中導致了一個錯誤。然而,這個錯誤是由Coden Analysis引起的,沒有發現異常,因此無法找到符號。您可以在「常規 - >啓動/關閉」下的「首選項」中關閉Coden或更改其在C/C++代碼分析中的行爲。

這也許可以解釋有時隨機性其他人也遇到

1

我認爲你還沒有加入定義NULL頭文件。添加stdlib.h(#include語句)。它定義了NULL宏。

0

只需將C:\MinWG\lib添加到Eclipse的庫路徑中即可。

0

我也遇到類似的問題,就是「符號精靈魔法無法解析」,並且已經包含了精靈頭文件。我認爲這個問題可能是由庫緩存引起的,因爲重新啓動軟件可以解決問題。感謝他人的幫助。

+0

你有沒有遇到類似的問題? – Alex

+0

是的,我的問題是「符號」精靈魔術「無法解決」 – user6528152

+0

歡迎來到SO。有關發佈答案的一些提示。發佈答案如果:1。你遇到了類似的問題,並能夠解決它。 2.你認爲你的答案可以起作用(例如,你的解決方案是不同的,或者問題稍有不同,但與原始問題有關)。在你的答案中包含更多細節。 – Alex