我正在尝试在 VSCode 上测试以下 C++ 代码,但似乎无法让它工作。截至目前,网上搜索尚未提供结果。尝试更改编译器,但似乎无法自行修复。不知道我如何进一步进行。操作系统是 ubuntu(如果相关):
#include <iostream> //input output library, containing printing and asking input etc.
int main() {
std::cout << "test"; //statement
return 0; //tells system it terminated correctly
}
问题窗口下提到以下错误:
测试.cpp
#include 检测到错误。请更新您的 includePath。此翻译单元禁用波形图 (/mnt/F894C3B494C373A2/Downloads/c++/test.cpp)。
无法打开源文件“xlocale.h”(“iostream”的依赖项)
studio.h /usr/include
标记“(”之前缺少二元运算符 ..几次
libc-header-start.h /usr/include/x86_64-linux-gnu/bits
标记“(”之前缺少二元运算符
cdefs.h /usr/include/x86_64-linux-gnu/sys
标记“(”之前缺少二元运算符
终端窗口有以下输出:
* Executing task: C/C++: gcc build active file
Starting build...
/home/mike/mesasdk/bin/gcc -fdiagnostics-color=always -g /mnt/F894C3B494C373A2/Downloads/c++/test.cpp -o /mnt/F894C3B494C373A2/Downloads/c++/test
In file included from /home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/features.h:338,
from /home/mike/mesasdk/include/c++/12.1.0/x86_64-pc-linux-gnu/bits/os_defines.h:39,
from /home/mike/mesasdk/include/c++/12.1.0/x86_64-pc-linux-gnu/bits/c++config.h:655,
from /home/mike/mesasdk/include/c++/12.1.0/iostream:38,
from /mnt/F894C3B494C373A2/Downloads/c++/test.cpp:1:
/usr/include/x86_64-linux-gnu/sys/cdefs.h:492:49: error: missing binary operator before token "("
492 | #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5)
| ^
In file included from /usr/include/stdio.h:27,
from /home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/wchar.h:46,
from /home/mike/mesasdk/include/c++/12.1.0/cwchar:44,
from /home/mike/mesasdk/include/c++/12.1.0/bits/postypes.h:40,
from /home/mike/mesasdk/include/c++/12.1.0/iosfwd:40,
from /home/mike/mesasdk/include/c++/12.1.0/ios:38,
from /home/mike/mesasdk/include/c++/12.1.0/ostream:38,
from /home/mike/mesasdk/include/c++/12.1.0/iostream:39:
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:56:17: error: missing binary operator before token "("
56 | #if __GLIBC_USE (IEC_60559_BFP_EXT) || __GLIBC_USE (ISOC2X)
| ^
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:73:17: error: missing binary operator before token "("
73 | #if __GLIBC_USE (IEC_60559_FUNCS_EXT) || __GLIBC_USE (ISOC2X)
| ^
/usr/include/stdio.h:290:43: error: missing binary operator before token "("
290 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
| ^
/usr/include/stdio.h:363:17: error: missing binary operator before token "("
363 | #if __GLIBC_USE (LIB_EXT2)
| ^
/usr/include/stdio.h:405:18: error: missing binary operator before token "("
405 | #if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT
| ^
/usr/include/stdio.h:449:19: error: missing binary operator before token "("
449 | # if !__GLIBC_USE (DEPRECATED_SCANF)
| ^
/usr/include/stdio.h:567:17: error: missing binary operator before token "("
567 | #if __GLIBC_USE (DEPRECATED_GETS)
| ^
/usr/include/stdio.h:592:43: error: missing binary operator before token "("
592 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
| ^
/home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/wchar.h:175:11: fatal error: xlocale.h: No such file or directory
175 | # include <xlocale.h>
| ^~~~~~~~~~~
compilation terminated.
Build finished with error(s).
* The terminal process failed to launch (exit code: -1).
* Terminal will be reused by tasks, press any key to close it.
* Executing task: C/C++: gcc build active file
Starting build...
/home/mike/mesasdk/bin/gcc -fdiagnostics-color=always -g /mnt/F894C3B494C373A2/Downloads/c++/test.cpp -o /mnt/F894C3B494C373A2/Downloads/c++/test
In file included from /home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/features.h:338,
from /home/mike/mesasdk/include/c++/12.1.0/x86_64-pc-linux-gnu/bits/os_defines.h:39,
from /home/mike/mesasdk/include/c++/12.1.0/x86_64-pc-linux-gnu/bits/c++config.h:655,
from /home/mike/mesasdk/include/c++/12.1.0/iostream:38,
from /mnt/F894C3B494C373A2/Downloads/c++/test.cpp:1:
/usr/include/x86_64-linux-gnu/sys/cdefs.h:492:49: error: missing binary operator before token "("
492 | #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5)
| ^
In file included from /usr/include/stdio.h:27,
from /home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/wchar.h:46,
from /home/mike/mesasdk/include/c++/12.1.0/cwchar:44,
from /home/mike/mesasdk/include/c++/12.1.0/bits/postypes.h:40,
from /home/mike/mesasdk/include/c++/12.1.0/iosfwd:40,
from /home/mike/mesasdk/include/c++/12.1.0/ios:38,
from /home/mike/mesasdk/include/c++/12.1.0/ostream:38,
from /home/mike/mesasdk/include/c++/12.1.0/iostream:39:
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:56:17: error: missing binary operator before token "("
56 | #if __GLIBC_USE (IEC_60559_BFP_EXT) || __GLIBC_USE (ISOC2X)
| ^
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:73:17: error: missing binary operator before token "("
73 | #if __GLIBC_USE (IEC_60559_FUNCS_EXT) || __GLIBC_USE (ISOC2X)
| ^
/usr/include/stdio.h:290:43: error: missing binary operator before token "("
290 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
| ^
/usr/include/stdio.h:363:17: error: missing binary operator before token "("
363 | #if __GLIBC_USE (LIB_EXT2)
| ^
/usr/include/stdio.h:405:18: error: missing binary operator before token "("
405 | #if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT
| ^
/usr/include/stdio.h:449:19: error: missing binary operator before token "("
449 | # if !__GLIBC_USE (DEPRECATED_SCANF)
| ^
/usr/include/stdio.h:567:17: error: missing binary operator before token "("
567 | #if __GLIBC_USE (DEPRECATED_GETS)
| ^
/usr/include/stdio.h:592:43: error: missing binary operator before token "("
592 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
| ^
/home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/wchar.h:175:11: fatal error: xlocale.h: No such file or directory
175 | # include <xlocale.h>
| ^~~~~~~~~~~
compilation terminated.
Build finished with error(s).
* The terminal process failed to launch (exit code: -1).
* Terminal will be reused by tasks, press any key to close it.
tasks.json 文件:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc build active file",
"command": "/home/mike/mesasdk/bin/gcc",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
},
{
"type": "cppbuild",
"label": "C/C++: gcc-9 build active file",
"command": "/usr/bin/gcc-9",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "Task generated by Debugger."
},
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/home/mike/mesasdk/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
launch.json 文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: gcc-9 build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc-9 build active file",
"miDebuggerPath": "/usr/bin/gdb"
},
{
"name": "C/C++: g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/home/mike/mesasdk/bin/gdb"
}
]
}
c_cpp_properties.json 文件:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64",
"compilerPath": "/home/mike/mesasdk/bin/gcc"
}
],
"version": 4
}
更改了编译器,重新安装了其中一些编译器,并尝试将编译器更新到更高版本(已经是最新的)。
编辑:
尝试通过终端运行测试程序会出现相同的错误:
c++ test.cpp
In file included from /home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/features.h:338,
from /home/mike/mesasdk/include/c++/12.1.0/x86_64-pc-linux-gnu/bits/os_defines.h:39,
from /home/mike/mesasdk/include/c++/12.1.0/x86_64-pc-linux-gnu/bits/c++config.h:655,
from /home/mike/mesasdk/include/c++/12.1.0/iostream:38,
from test.cpp:1:
/usr/include/x86_64-linux-gnu/sys/cdefs.h:492:49: error: missing binary operator before token "("
492 | #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5)
| ^
In file included from /usr/include/stdio.h:27,
from /home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/wchar.h:46,
from /home/mike/mesasdk/include/c++/12.1.0/cwchar:44,
from /home/mike/mesasdk/include/c++/12.1.0/bits/postypes.h:40,
from /home/mike/mesasdk/include/c++/12.1.0/iosfwd:40,
from /home/mike/mesasdk/include/c++/12.1.0/ios:38,
from /home/mike/mesasdk/include/c++/12.1.0/ostream:38,
from /home/mike/mesasdk/include/c++/12.1.0/iostream:39:
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:56:17: error: missing binary operator before token "("
56 | #if __GLIBC_USE (IEC_60559_BFP_EXT) || __GLIBC_USE (ISOC2X)
| ^
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:73:17: error: missing binary operator before token "("
73 | #if __GLIBC_USE (IEC_60559_FUNCS_EXT) || __GLIBC_USE (ISOC2X)
| ^
/usr/include/stdio.h:290:43: error: missing binary operator before token "("
290 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
| ^
/usr/include/stdio.h:363:17: error: missing binary operator before token "("
363 | #if __GLIBC_USE (LIB_EXT2)
| ^
/usr/include/stdio.h:405:18: error: missing binary operator before token "("
405 | #if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT
| ^
/usr/include/stdio.h:449:19: error: missing binary operator before token "("
449 | # if !__GLIBC_USE (DEPRECATED_SCANF)
| ^
/usr/include/stdio.h:567:17: error: missing binary operator before token "("
567 | #if __GLIBC_USE (DEPRECATED_GETS)
| ^
/usr/include/stdio.h:592:43: error: missing binary operator before token "("
592 | #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
| ^
/home/mike/mesasdk/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed/wchar.h:175:11: fatal error: xlocale.h: No such file or directory
175 | # include <xlocale.h>
| ^~~~~~~~~~~
compilation terminated.
mike@mike-Legion-Y540-15IRH:/mnt/F894C3B494C373A2/Downloads/c++$ update-alternatives --query gcc
update-alternatives: error: no alternatives for gcc
mike@mike-Legion-Y540-15IRH:/mnt/F894C3B494C373A2/Downloads/c++$ update-alternatives --query g++
update-alternatives: error: no alternatives for g++
几个小时后,问题显然出在 mesa sdk 的固定标题行上。使用
GCC_VERSION=`gcc --version | grep ^gcc | sed 's/^.* //g'`
$MESASDK_ROOT/libexec/gcc/x86_64-pc-linux-gnu/$GCC_VERSION/install-tools/mkheaders $MESASDK_ROOT
解决了。