2017-06-22 65 views
0

GCC 5.4.0 的cygwin 2.8.0 Win10gcc 5.40不包含標準包含文件?

我已經被敲我的頭解決此問題。當我編譯一個簡單的程序,請參見下面,我得到一個錯誤,在海灣合作委員會的一個包含文件。我查了一下cygwin郵件列表,沒有人報告過gcc下載的錯誤,所以我認爲這是我的誤解,但我無法弄清楚我做錯了什麼。在此之前,所有gcc include文件都會自動包含在內。哦,其他庫的編譯是正確的。

的代碼是:

GCC -std = C++ 11 TEST.CPP或GCC TEST.CPP

的iostream

使用命名空間std包括;

INT主(INT的argc,焦炭** argv的){}

和錯誤信息是:

/tmp/ccfBvaqg.o:test.cpp:(.text+ 0×44):未定義參照std::ios_base::Init::Init()' /tmp/ccfBvaqg.o:test.cpp:(.text+0x44): relocation truncated to fit: R_X86_64_PC32 against undefined symbol的std ::的ios_base ::初始化::初始化()」

/tmp/ccfBvaqg.o:test.cpp:(.rdata$.refptr._ZNSt8ios_base4InitD1Ev[.refptr._ZNSt8ios_base4InitD1Ev]+ 0x0):對`std :: ios_base :: Init ::〜Init()'的未定義引用'

+0

它與包含文件無關,它是一個鏈接錯誤。事實是,你沒有鏈接到標準的C++庫(-lstdC++)。 – spectras

+0

可能重複[什麼是未定義的引用/未解析的外部符號錯誤,以及如何解決它?](https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) –

+0

這不是有效的代碼。 C++代碼不是以'gcc -std'開頭,'include'在它前面有一個散列(井號),文件名被封裝在'<>'中。此外,這是重複的,如果您在發佈前搜索了*未定義的參考*,您將會了解到這一點。 (順便說一句,代碼沒有用blockquotes格式化,它被格式化爲代碼,選擇它並在鍵盤上按Ctrl + K或單擊工具欄上的* {} *按鈕。) –

回答

1

gcc是C編譯器驅動程序。編譯器根據文件名自動檢測語言;這就是編譯成功的原因。但是,鏈接器不受源文件名稱的影響。默認情況下,C編譯器驅動程序不與C++標準庫鏈接。

由於您使用的是標準庫(<iostream>是一種非典型的頭文件,僅僅包含它會導致在程序開始時調用標準庫函數),但沒有鏈接它,鏈接器失敗。解決方案是與C++標準庫鏈接。最簡單的方法是使用默認鏈接標準庫的C++編譯器驅動程序(g++)。