gcc 5.40不包含标准包含文件?

时间:2017-06-22 22:36:58

标签: c++11 gcc cygwin

gcc 5.4.0 cygwin 2.8.0 Win10

我一直在解决这个问题。当我编译一个简单的程序时,请参阅下面的内容,我在其中一个gcc包含文件中出错。我检查了cygwin邮件列表,没有人报告gcc下载中的错误,所以我认为这是我的一个误解,但我无法弄清楚我做错了什么。在此之前,所有gcc包含文件都会自动包含在内。哦,编译对其他库来说是正确的。

代码是:

  

gcc -std = c ++ 11 test.cpp或gcc test.cpp

     

包括iostream

     

使用namespace std;

     

int main(int argc,char ** argv){}

,错误信息为:

  

/tmp/ccfBvaqg.o:test.cpp :(。text + 0x44):未定义引用exec 2> >( while read -r line; do printf '%s\n' "${line}" >&2 printf '%s\n' "${line}" >> err.log done ) std :: ios_base :: Init :: Init()'

     

/tmp/ccfBvaqg.o:test.cpp :(。rdata $ .refptr._ZNSt8ios_base4InitD1Ev [.refptr._ZNSt8ios_base4InitD1Ev] + 0x0):对`std :: ios_base :: Init :: ~Init()&的未定义引用#39;

1 个答案:

答案 0 :(得分:1)

gcc是C编译器驱动程序。编译器根据文件名自动检测语言;这就是编译成功的原因。但是,链接器不受源文件名称的影响。默认情况下,C编译器驱动程序不与C ++标准库链接。

由于您使用了标准库(<iostream>是一个非典型的头文件,只是包含它导致在程序开始时调用标准库函数),但没有链接它,链接器失败。解决方案是与C ++标准库链接。最简单的方法是使用默认链接标准库的C ++编译器驱动程序(g++)。