Код Visual Studio с Bash Terminal (WSL) в C ++ создает только файлы .out, но не .exe - PullRequest
0 голосов
/ 05 мая 2018

Я использую код Visual Studio в Windows 10 с подсистемой Linux. (Ubuntu)

Я создал небольшой файл c ++, и когда я собираю его с помощью терминала bash, создается только файл .out. Это нормально, но я также хочу отладить его, и в этом случае я могу открывать только файлы .exe.

Когда я переключаюсь на powershell из bash - расширение сборки - это .exe

tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "echo",
      "type": "shell",
      "command": "g++",
      "args": [
        "-g", "main.cpp"
      ],
      "group": { "kind": "build", "isDefault": true }
    }
  ]
}

launch.json for debugging 

{
      "name": "(gdb) Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/a.exe", // .out doesn't work here
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
      "preLaunchTask": "echo",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }

main.cpp

#include <iostream>

int main() {
  std::cout << "hello a" << std::endl;
}

Я действительно не уверен, что делать - поскольку я не могу отлаживать файлы .out, и я бы сам хотел выбрать расширение для сборки.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Чтобы запустить / отладить кроссплатформенность, вы должны использовать кросс-компиляторы, такие как MinGW. Вы можете установить MinGW-w64 в Windows, Linux (или WSL).

VScode-tools с помощью gdb.exe из MinGW может отлаживать *.out, а также *.exe файлы (протестировано).

Для компиляции 64-битной версии вам необходимо включить некоторую статическую библиотеку зависимостей для C / C ++, которая во время компиляции будет libgcc и libstdc ++ . поэтому command и args в task.json должны быть:

"command": "x86_64-w64-mingw32-g++",
"args": [
           "-g",                  //Need for debug and compatibility
           "-static-libgcc",      //flag for the libgcc
           "-static-libstdc++",   //flag for the libgc++
           "helloworld.cpp",      //C++ source code
           "-o",                  //flag for output
           "a2.out"               //Output filename and extension (can be .exe) 
            ],

Подробнее о зависимостях стандартной библиотеки C / C ++ здесь

0 голосов
/ 05 мая 2018

Нашли решение:

sudo apt-get install mingw-w64

А потом внутри заданий. Json

"command": "i686-w64-mingw32-g++"

Это компилирует 32-битный exe - но 64-битная версия с x86_64-w64-mingw32-g++ почему-то не работает. Создает недействительный exe.

...