DEV Community

Jubayer Rahman
Jubayer Rahman

Posted on

Fixing C++ Compilation and Run Button Issues in VS Code on Windows

The Problem I Faced

As a developer working with C++ in Visual Studio Code on Windows, I encountered two frustrating issues that prevented me from having a smooth coding experience:

Issue 1: Compilation Errors with GCC

When trying to compile my C++ file (oops.cpp) using the default VS Code configuration, I was getting these linker errors:

undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
undefined reference to `std::cout'
Enter fullscreen mode Exit fullscreen mode

The build was failing completely, and I couldn't understand why such a simple "Hello World" program wasn't compiling.

Issue 2: VS Code Run Button Not Working

Even after fixing the compilation issue, the convenient run button (▷) in VS Code's top-right corner wasn't working properly. I wanted to be able to click that button and see my program's output directly in the integrated terminal, but instead I was getting PowerShell errors.

Root Causes

Cause 1: Using GCC Instead of G++

The first issue was caused by VS Code's default configuration using gcc.exe to compile .cpp files. The problem is:

  • gcc is the C compiler
  • g++ is the C++ compiler
  • While gcc can compile C++ code, it doesn't automatically link the C++ standard library
  • My code used C++ features like std::cout and std::endl, which require the C++ standard library

Cause 2: PowerShell Command Syntax Issues

The second issue was related to VS Code's Code Runner extension using command syntax that wasn't compatible with Windows PowerShell:

  • The default configuration used && operators, which PowerShell doesn't recognize
  • The executable was called without the .\ prefix, which PowerShell requires for local executables

The Solutions

Solution 1: Switch from GCC to G++

The immediate fix for the compilation issue was simple - use g++ instead of gcc:

Before (failing):

gcc.exe -fdiagnostics-color=always -g oops.cpp -o oops.exe
Enter fullscreen mode Exit fullscreen mode

After (working):

g++.exe -fdiagnostics-color=always -g oops.cpp -o oops.exe
Enter fullscreen mode Exit fullscreen mode

This change ensures that:

  • The C++ standard library is automatically linked
  • All C++ features work out of the box
  • No manual library linking is required

Solution 2: Configure VS Code Code Runner for PowerShell

To make the run button work seamlessly, I needed to configure VS Code's Code Runner extension with PowerShell-compatible syntax.

I added this configuration to my VS Code settings.json:

{
    "code-runner.executorMap": {
        "cpp": "cd $dir ; g++ -fdiagnostics-color=always -g $fileName -o $fileNameWithoutExt.exe ; if ($?) { .\\$fileNameWithoutExt.exe }"
    },
    "code-runner.runInTerminal": true,
    "code-runner.saveFileBeforeRun": true,
    "code-runner.clearPreviousOutput": true
}
Enter fullscreen mode Exit fullscreen mode

Key changes made:

  • Used ; instead of && for command separation (PowerShell syntax)
  • Added if ($?) to check if compilation succeeded before running
  • Used .\\ prefix for the executable (PowerShell requirement)
  • Changed from gcc to g++ in the command

Step-by-Step Setup Guide

If you're facing similar issues, here's how to set up your VS Code for seamless C++ development:

Step 1: Install Required Extensions

  • C/C++ (by Microsoft)
  • Code Runner (by Jun Han)

Step 2: Configure Code Runner

  1. Open VS Code Settings (Ctrl+,)
  2. Search for "code runner executor map"
  3. Click "Edit in settings.json"
  4. Add the configuration shown above

Step 3: Verify Your Setup

  1. Create a simple C++ file:
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
Enter fullscreen mode Exit fullscreen mode
  1. Click the run button (▷) in the top-right corner
  2. You should see compilation and execution happen automatically

The Result

After implementing these fixes, my C++ development workflow in VS Code became incredibly smooth:

  • ✅ One-click compilation and execution
  • ✅ Automatic file saving before running
  • ✅ Clear output in the integrated terminal
  • ✅ No more manual terminal commands needed
  • ✅ Proper error handling and feedback

Key Takeaways

  1. Know your compilers: Always use g++ for C++ files, not gcc
  2. Shell matters: Different shells (PowerShell vs Command Prompt) have different syntax requirements
  3. VS Code is configurable: Most workflow issues can be solved with proper configuration
  4. Test incrementally: Fix one issue at a time to isolate problems

Alternative Approaches

If you prefer using Command Prompt instead of PowerShell, you can use this alternative configuration:

{
    "code-runner.executorMap": {
        "cpp": "cd /d $dir && g++ -fdiagnostics-color=always -g $fileName -o $fileNameWithoutExt.exe && $fileNameWithoutExt.exe"
    },
    "terminal.integrated.defaultProfile.windows": "Command Prompt"
}
Enter fullscreen mode Exit fullscreen mode

This approach uses Command Prompt syntax with && operators, which some developers might find more familiar.


With these fixes in place, C++ development in VS Code on Windows becomes as smooth as it should be. No more compilation errors, no more manual terminal work - just write code and hit run!

Top comments (0)