Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
mohitmishra786 avatar

Gcc

  • 393 installs
  • 155 repo stars
  • Updated June 27, 2026
  • mohitmishra786/low-level-dev-skills

gcc is an agent skill that guides GNU Compiler Collection flag selection, diagnostics, LTO, PGO, and sanitizer setup for developers who compile optimized C/C++ native libraries, CLIs, and JNI bridges.

About

gcc is an agent skill from mohitmishra786/low-level-dev-skills, a curated suite for systems programming across C/C++, Rust, and Zig toolchains. The skill walks agents through GCC invocations: debug builds with -g -O0 -Wall -Wextra, release -O2/-O3 profiles, link-time optimization, profile-guided optimization, and -fsanitize=address,undefined instrumentation. It covers warning triage, undefined-reference and ABI mismatch errors, preprocessor macros, and integration with GNU Make, CMake, or shell build scripts. The parent repo groups gcc among 8 dedicated C/C++ compiler skills alongside clang, llvm, cross-gcc, and pgo. Developers reach for gcc when a native build is too slow, too large, too noisy with warnings, or failing at link time—and they need concrete flag recipes instead of guessing optimization levels.

  • Warning and optimization flags
  • Static vs shared linking
  • LTO and PGO basics
  • Debug symbol control
  • Multistage Makefile/CMake usage

Gcc by the numbers

  • 393 all-time installs (skills.sh)
  • +26 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #140 of 550 CLI & Terminal skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill gcc

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs393
repo stars155
Last updatedJune 27, 2026
Repositorymohitmishra786/low-level-dev-skills

Which GCC flags should I use for release builds?

Configure GCC flags, warnings, LTO, and link steps to compile optimized native libraries, CLIs, and mobile JNI bridges reliably.

Who is it for?

Systems and backend developers compiling C/C++ with GCC via Make, CMake, or shell scripts who need correct debug, release, LTO, PGO, or sanitizer flag sets.

Skip if: Pure JavaScript or managed-language projects with no native compilation step, or teams standardized exclusively on Clang/MSVC without GCC.

When should I use this skill?

User asks about gcc flags, compilation errors, LTO, PGO, -fsanitize, warning suppression, or optimizing a slow or oversized GCC binary.

What you get

Optimized compile and link command lines with chosen -O levels, warning flags, LTO/PGO steps, and sanitizer instrumentation for C/C++ targets.

  • GCC compile and link command lines
  • Optimized warning and sanitizer flag sets

By the numbers

  • Part of low-level-dev-skills with 8 dedicated C/C++ compiler skills including gcc and clang
  • Documents 5 build-mode flag profiles from debug (-O0) through release (-O3) and -Os

Files

SKILL.mdMarkdownGitHub ↗

GCC

Purpose

Guide agents through GCC invocation: flag selection, build modes, warning triage, PGO, LTO, and common error patterns. Assume the project uses GNU Make, CMake, or a shell script.

Triggers

  • "What flags should I use for a release build?"
  • "GCC is giving me a warning/error I don't understand"
  • "How do I enable LTO / PGO with GCC?"
  • "How do I compile with -fsanitize?"
  • "My binary is too large / too slow"
  • Undefined reference errors, ABI mismatch, missing symbols

Workflow

1. Choose a build mode

GoalRecommended flags
Debug-g -O0 -Wall -Wextra
Debug + debuggable optimisation-g -Og -Wall -Wextra
Release-O2 -DNDEBUG -Wall
Release (max perf, native only)-O3 -march=native -DNDEBUG
Release (min size)-Os -DNDEBUG
Sanitizer (dev)-g -O1 -fsanitize=address,undefined

Always pass -std=c11 / -std=c++17 (or the required standard) explicitly. Never rely on the implicit default.

2. Warning discipline

Start with -Wall -Wextra. For stricter standards compliance add -Wpedantic. To treat all warnings as errors in CI: -Werror.

Suppress a specific warning only in a narrow scope:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
// ...
#pragma GCC diagnostic pop

Do not pass -w (silences everything) except as a last resort for third-party headers.

3. Debug information

  • -g — DWARF debug info, default level 2
  • -g3 — includes macro definitions (useful with GDB macro expand)
  • -ggdb — DWARF extensions optimal for GDB
  • -gsplit-dwarf — splits .dwo files; reduces link time, needed for debuginfod

Pair -g with -Og (not -O0) when you need readable optimised code in GDB.

4. Optimisation decision tree

Need max throughput on a fixed machine?
  yes -> -O3 -march=native -flto
  no  -> profiling available?
           yes -> -O2 -fprofile-use
           no  -> -O2
Size-constrained (embedded, shared lib)?
  yes -> -Os  (or -Oz with clang)

-O3 vs -O2: -O3 adds aggressive loop transformations (-funswitch-loops, -fpeel-loops, -floop-interchange) and more aggressive inlining. Use -O3 only after benchmarking; it occasionally regresses due to i-cache pressure.

-Ofast: enables -ffast-math which breaks IEEE 754 semantics (NaN handling, associativity). Avoid unless the numerical domain explicitly permits it.

5. Link-time optimisation (LTO)

# Compile
gcc -O2 -flto -c foo.c -o foo.o
gcc -O2 -flto -c bar.c -o bar.o
# Link (must pass -flto again)
gcc -O2 -flto foo.o bar.o -o prog

Use gcc-ar / gcc-ranlib instead of ar / ranlib when archiving LTO objects into static libs.

For parallel LTO: -flto=auto (uses make-style jobserver) or -flto=N.

See references/flags.md for full flag reference. See skills/binaries/linkers-lto for linker-level LTO configuration.

6. Profile-guided optimisation (PGO)

# Step 1: instrument
gcc -O2 -fprofile-generate prog.c -o prog_inst
# Step 2: run with representative workload
./prog_inst < workload.input
# Step 3: optimise with profile
gcc -O2 -fprofile-use -fprofile-correction prog.c -o prog

-fprofile-correction handles profile data inconsistencies from multi-threaded runs.

7. Preprocessor and standards

  • Inspect macro expansion: gcc -E file.c | less
  • Dump predefined macros: gcc -dM -E - < /dev/null
  • Force strict standard: -std=c11 -pedantic-errors
  • Disable GNU extensions: -std=c11 (not -std=gnu11)

8. Common error triage

SymptomLikely causeFix
undefined reference to 'foo'Missing -lfoo or wrong link orderAdd -lfoo; move -l flags after object files
multiple definition of 'x'Variable defined (not just declared) in a headerAdd extern in header, define in one .c
implicit declaration of functionMissing #includeAdd the header
warning: incompatible pointer typesWrong cast or missing prototypeFix the type; check headers
ABI errors with C++Mixed -std= or different libstdc++Unify -std= across all TUs
relocation truncatedOverflow on a 32-bit relative relocationUse -mcmodel=large or restructure code

For sanitizer reports, use skills/runtimes/sanitizers.

9. Useful one-liners

# Show all flags enabled at -O2
gcc -Q --help=optimizers -O2 | grep enabled

# Preprocess only (check includes/macros)
gcc -E -dD src.c -o src.i

# Assembly output (Intel syntax)
gcc -S -masm=intel -O2 foo.c -o foo.s

# Show include search path
gcc -v -E - < /dev/null 2>&1 | grep -A20 '#include <...>'

# Check if a flag is supported
gcc -Q --help=target | grep march

For a complete flag cheatsheet, see references/flags.md. For common error patterns and examples, see references/examples.md.

Related skills

  • Use skills/runtimes/sanitizers to add -fsanitize=* builds
  • Use skills/compilers/clang when switching to clang/LLVM
  • Use skills/binaries/linkers-lto for advanced LTO linker flags
  • Use skills/debuggers/gdb for debugging GCC-built binaries

Related skills

How it compares

Pick gcc over generic C++ advice when the toolchain is specifically GNU GCC and you need flag tables for LTO, PGO, sanitizers, and Make/CMake integration.

FAQ

What GCC flags does the gcc skill recommend for debug builds?

The gcc skill recommends -g -O0 -Wall -Wextra for full debuggability, or -g -Og -Wall -Wextra when some optimization is needed while keeping binaries easy to debug in GDB.

Does the gcc skill cover link-time optimization?

Yes. The gcc skill documents LTO and profile-guided optimization workflows, including when to enable -flto for release builds and how to integrate PGO collect and use phases with Make or CMake.

Which build systems does the gcc skill assume?

The gcc skill assumes projects build with GNU Make, CMake, or shell scripts. It focuses on flag selection, warning triage, and common link errors rather than replacing those build systems.

CLI & Terminalbackenddevops

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.