使用vscode,为什么同时包含“ iosteam”和“ stdio.h”时为什么不能编译?

时间:2019-10-11 08:29:36

标签: c compilation mingw-w64

当我同时声明时,vscode无法编译文件,并且出现错误日志:

    > Executing task: C:\mingw64\bin\gcc.exe -g d:\CODES\C++\try\main.cpp -o d:\CODES\C++\try\main.exe <

C:\Users\16337\AppData\Local\Temp\ccqDR0fO.o: In function `__tcf_0':
C:/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++/iostream:74: undefined reference to `std::ios_base::Init::~Init()'
C:\Users\16337\AppData\Local\Temp\ccqDR0fO.o: In function `__static_initialization_and_destruction_0':
C:/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++/iostream:74: undefined reference to `std::ios_base::Init::Init()'
collect2.exe: error: ld returned 1 exit status

我的代码很简单:

#include <iostream>
#include <stdio.h>


int main()
{
    printf("print something");
    return 0;
}

Dev-C ++可以正确编译该代码。

如果我删除#include <iostream>,则可以正确编译它。

1 个答案:

答案 0 :(得分:5)

<iostream>是标准的C ++标头,因此您需要C ++编译器和链接器才能使用它。 gcc足够聪明,可以像C ++一样编译.cpp文件,但是它不会将标准库链接到您的程序中,因此不会链接未定义的引用。

您需要使用g++,默认情况下,它将像Dev-C ++一样链接标准C ++库。