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;
答案 0 :(得分:1)
gcc
是C编译器驱动程序。编译器根据文件名自动检测语言;这就是编译成功的原因。但是,链接器不受源文件名称的影响。默认情况下,C编译器驱动程序不与C ++标准库链接。
由于您使用了标准库(<iostream>
是一个非典型的头文件,只是包含它导致在程序开始时调用标准库函数),但没有链接它,链接器失败。解决方案是与C ++标准库链接。最简单的方法是使用默认链接标准库的C ++编译器驱动程序(g++
)。