标识符 cout 未定义

标识符 cout 未定义

我正在使用 Ubuntu 22.04 LTS 上的 GCC-12 编译器编译以下代码。我的机器 11 和 12 上安装了 2 个不同版本的 GCC。

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
}

这是我的tasks.json文件

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "Build with GCC 11",
            "command": "/usr/bin/gcc-11",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "-L/usr/lib/x86_64-linux-gnu/libstdc++.so.6",
                "-lstdc++",
                "-std=c++17",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

我收到以下错误

正在执行任务:使用 GCC 12 构建

开始构建... /usr/bin/gcc-12 -fdiagnostics-color=always -g -L/usr/lib/x86_64-linux-gnu/libstdc++.so.6 -lstdc++ -std=c++20 /home/pratham/Downloads/C++/hello.cpp -o /home/pratham/Downloads/C++/hello

gcc-12:致命错误:无法执行“cc1plus”:execvp:没有这样的文件或目录编译终止。

构建完成,但存在错误。

  • 终端进程启动失败(退出代码:-1)。
  • 终端将被任务重用,按任意键将其关闭。

答案1

你问题标题中的错误和问题正文中的错误不同。

undefined reference to `std::cout'

当 gcc 和 g++ 都已安装,但您尝试通过调用 C 编译器gcc而不是 C++ 编译器来编译 C++ 代码时,就会发生这种情况g++。虽然gcc可以识别和编译 C++ 代码(通过调用相应的前端),但它不会像使用 - 时那样cc1plus自动链接 C++ 标准库,因此在链接阶段1失败。libstdc++g++

另一方面,

gcc-12: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory

当您尝试使用 编译 C++ 时发生这种情况gcc,但相应的g++(提供cc1plus)甚至没有安装 - 大概是您设置“命令”:“/usr/bin/gcc-12”时的情况。

无论哪种方式,在编译 C++ 代码时都应该使用g++(或者g++-11g++-12等,如果您想指定特定版本) 而不是gcc// gcc-11gcc-12


  1. 如果你对这些事情感到好奇,你可以通过执行来验证gcc hello.cpp -lstdc++

相关内容