C++11 gcc 5.40没有';不包括标准包含文件?

C++11 gcc 5.40没有';不包括标准包含文件?,c++11,gcc,cygwin,C++11,Gcc,Cygwin,通用条款5.4.0 cygwin 2.8.0 Win10 我一直在琢磨这个问题。当我编译一个简单的程序时,见下面,我在一个gcc包含文件中得到一个错误。我检查了cygwin邮件列表,没有人报告gcc下载中的错误,所以我认为这是我的误解,但我不知道我做错了什么。在此之前,所有gcc包含文件都是自动包含的。哦,编译对其他库是正确的 代码是: gcc-std=c++11 test.cpp或gcc test.cpp 包括iostream 使用名称空间std int main(int argc,char*

通用条款5.4.0 cygwin 2.8.0 Win10

我一直在琢磨这个问题。当我编译一个简单的程序时,见下面,我在一个gcc包含文件中得到一个错误。我检查了cygwin邮件列表,没有人报告gcc下载中的错误,所以我认为这是我的误解,但我不知道我做错了什么。在此之前,所有gcc包含文件都是自动包含的。哦,编译对其他库是正确的

代码是:

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

包括iostream

使用名称空间std

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

错误消息是:

/tmp/ccfBvaqg.o:test.cpp:(.text+0x44):对
std::ios\u base::Init::Init()的未定义引用
/tmp/ccfBvaqg.o:test.cpp:(.text+0x44):根据未定义的符号截断重新定位:R_X86_64_PC32

/tmp/ccfBvaqg.o:test.cpp:(.rdata$.refptr.\u ZNSt8ios\u base4InitD1Ev[.refptr.\u ZNSt8ios\u base4InitD1Ev]+0x0):对“std::ios\u base::Init::~Init()的未定义引用


gcc
是C编译器驱动程序。编译器根据文件名自动检测语言;这就是汇编成功的原因。但是,链接器不受源文件名称的影响。默认情况下,C编译器驱动程序不与C++标准库链接。
由于使用了标准库(
是一种有点非典型的头文件,仅包含它会导致在程序开始时调用标准库函数),但没有链接它,因此链接器失败。解决方案是与C++标准库链接。最简单的方法是使用C++编译器驱动程序(<代码> G++<代码>),默认情况下链接标准库。< /P>它与包含文件无关,这是链接错误。事实上,你没有链接到标准的C++库(-LSTDC++)。C++代码不是从 Gcc-STD开始的, >包含前面有一个哈希(磅符号),文件名被包装在<代码> <代码>中。此外,这是一个副本,如果您在发布之前在此处搜索未定义的引用,您将了解到这一点。(顺便说一句,代码不是用块引号格式化的;它是用代码格式化的。选择它并按键盘上的Ctrl+K或单击工具栏上的{}按钮。)