C\C++ в VS Code с подсистемой Linux для Windows

У меня возникают проблемы с тем, чтобы мои «включения» работали в моем редакторе в VS Code в Windows 10, сборка 17134, с использованием подсистемы Linux для Windows. У меня установлено расширение C/C++, и я могу запустить свое приложение, используя информацию из файла launch.json, указанную в документации здесь.

В их документации здесь, Microsoft описывает, как настроить c_cpp_properties.json, чтобы обойти эту проблему, но это не сильно меня продвинуло. В настоящее время я получаю сообщение об ошибке в строке «включает», в которой говорится:

#include errors detected. Please update your includePath. IntelliSense features for this translation unit (C:\Users\Username\Source\c-lang\hello.c) will be provided by the Tag Parser. cannot open source file "stdio.h"

Мой c_cpp_properties.json:

{
    "configurations": [
         {
             "name": "WSL",
             "intelliSenseMode": "clang-x64",
             "compilerPath": "/usr/bin/gcc",
             "includePath": [
                 "${workspaceFolder}",
                 "/usr/include/"
             ],
             "defines": [],
             "browse": {
                 "path": [
                     "${workspaceFolder}",
                     "/usr/include"
                 ],
                 "limitSymbolsToIncludedHeaders": true,
                 "databaseFilename": "",
             },
             "cStandard": "c11",
             "cppStandard": "c++17"
         }

    ],
    "version": 4
}

person loganhuskins    schedule 09.05.2018    source источник


Ответы (2)


Выяснил это благодаря этому комментарию к проблеме Github.

Я взял команду, которую они рекомендовали, и отредактировал ее, чтобы использовать C, а не C++, и запустил ее в WSL:

gcc -v -E -x c -

Среди прочего, в нем было указано, где весь gcc искал C-библиотеки. Я скопировал этот список и поместил отдельные пути в массивы «includePath» и «path». Вот мой обновленный файл c_cpp_properties.json:

{
  "configurations": [
    {
      "name": "WSL",
      "intelliSenseMode": "clang-x64",
      "compilerPath": "/usr/bin/gcc",
      "includePath": [
        "${workspaceFolder}",
        "/usr/include/x86_64-linux-gnu/5/include",
        "/usr/local/include",
        "/usr/include/x86_64-linux-gnu/5/include-fixed",
        "/usr/include/x86_64-linux-gnu",
        "/usr/include"
      ],
      "defines": [],
      "browse": {
        "path": [
          "${workspaceFolder}",
          "/usr/include/x86_64-linux-gnu/5/include",
          "/usr/local/include",
          "/usr/include/x86_64-linux-gnu/5/include-fixed",
          "/usr/include/x86_64-linux-gnu",
          "/usr/include"
        ],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
      },
      "cStandard": "c11",
      "cppStandard": "c++17"
    }
  ],
  "version": 4
}

Надеюсь, это поможет кому-то.

person loganhuskins    schedule 09.05.2018
comment
Спасибо :) Вы случайно не знаете, как проще всего настроить launch.json для отладки? - person Davo; 27.02.2019

Я новичок в C++, но способ, которым я исправил эту проблему, состоял в том, чтобы найти все мои возможные пути включения, выполнив поиск stddef.h на моей машине, а затем добавив их в мой includePath в коде VS. Вот пути, которые были добавлены:

C:\Cygwin\lib\gcc\x86_64-pc-cygwin\9.3.0\include

C:\Cygwin\lib\gcc\i686-w64-mingw32\9.2.0\include

C:\Cygwin\lib\gcc\x86_64-w64-mingw32\9.2.0\include

C:\Cygwin\usr\i686-w64-mingw32\sys-root\mingw\include

C:\Cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\include

C:\Cygwin\usr\include\С++\v1

C:\Cygwin\lib\gcc\i686-pc-cygwin\6.4.0\include

C:\Cygwin\lib\gcc\i586-pc-msdosdjgpp\5.4.0\include

C:\Cygwin\lib\gcc\i586-pc-msdosdjgpp\5.4.0\include-fixed

C:\Cygwin\usr\i586-pc-msdosdjgpp\sys-include

C:\Cygwin\lib\clang\8.0.1\include

C:\Cygwin\lib\clang\8.0.1\include

person William Meredith    schedule 23.04.2020