使用 VSCode 设置 c++ 时遇到问题。包括错误、缺少二元运算符和未找到 xlocale.h

问题描述 投票:0回答:1

我正在尝试在 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++

c++ linux visual-studio-code g++
1个回答
0
投票

几个小时后,问题显然出在 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

解决了。

© www.soinside.com 2019 - 2024. All rights reserved.