我正在使用 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++-11
或g++-12
等,如果您想指定特定版本) 而不是gcc
// gcc-11
。gcc-12
- 如果你对这些事情感到好奇,你可以通过执行来验证
gcc hello.cpp -lstdc++