К основному содержанию
скилл CX Codex

gcc — скилл для Claude Code: флаги, сборки и ошибки GCC

Подсказывает агенту флаги GCC для debug и release, разбирает ошибки компиляции и настраивает LTO с PGO.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill gcc -a claude-code
Открыть на GitHub

Что делает gcc

Скилл описывает, как вызывать GCC в проектах на C и C++: выбор уровня оптимизации, наборы предупреждений, режимы сборки, LTO, PGO и типовые ошибки. Агент опирается на таблицу режимов — от -g -O0 -Wall -Wextra для отладки до -Os -DNDEBUG, когда важен размер бинарника. Отдельно сказано передавать стандарт явно: -std=c11 или -std=c++17, а не полагаться на неявный. Совет дельный, потому что разные единицы трансляции с разными -std= дают ошибки ABI.

Внутри есть разбор частых сбоев: undefined reference, multiple definition, неявное объявление функции, несовместимые типы указателей, relocation truncated. Для каждого — причина и правка, например порядок флагов -l после объектных файлов. Ещё приведены однострочники вроде gcc -Q --help=optimizers -O2 | grep enabled и вывод ассемблера через -S -masm=intel.

LTO требует передавать -flto и на компиляции, и на линковке, а для статических библиотек — gcc-ar вместо ar. PGO идёт в три шага: -fprofile-generate, прогон на реальной нагрузке, затем -fprofile-use. Профиль с многопоточных прогонов бывает противоречивым, для этого есть -fprofile-correction. Скилл заявляет работу с GNU Make, CMake и shell-скриптами, но самих рецептов сборки не даёт — только флаги.

Какие задачи решает

  • подобрать флаги для release-сборки без просадки по скорости
  • включить LTO и не забыть -flto на этапе линковки
  • собрать инструментированный бинарник с -fsanitize=address,undefined
  • разобрать undefined reference и порядок флагов -l
  • подавить одно предупреждение в узкой области через #pragma GCC diagnostic

Примеры запросов агенту

  • Собери проект в release с LTO, покажи флаги
  • Почему линковка падает с undefined reference to foo?
  • Настрой PGO: инструментируй, прогони нагрузку, пересобери с профилем

Как установить gcc

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill gcc -a claude-code

2Вручную: положить файлы

~/.claude/skills/gcc/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/gcc/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о gcc

Как установить gcc в Claude?

Через установщик скиллов: npx skills add mohitmishra786/low-level-dev-skills --skill gcc -a claude-code. Файл скилла окажется в ~/.claude/skills/gcc/SKILL.md.

Что делает скилл gcc?

Ведёт агента по вызову GCC: режимы сборки, предупреждения, отладочная информация, оптимизация, LTO и PGO. Плюс таблица типовых ошибок компиляции с причиной и правкой.

Чем -O3 отличается от -O2?

-O3 добавляет агрессивные преобразования циклов и более смелый инлайнинг. Скилл советует включать его после замеров: из-за давления на i-cache результат иногда хуже.

Исходный текст

SKILL.md · MIT
---
name: gcc
description: GCC compiler skill for C/C++ projects. Use when selecting optimization levels, warning flags, debug builds, LTO, sanitizer instrumentation, or diagnosing compilation errors with GCC. Covers flag selection for debug vs release, ABI concerns, preprocessor macros, profile-guided optimization, and integration with build systems. Activates on queries about gcc flags, compilation errors, performance tuning, warning suppression, or cross-standard compilation.
---

# 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

| Goal | Recommended 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:

```c
#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

```text
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)

```bash
# 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](references/flags.md) for full flag reference. See `skills/binaries/linkers-lto` for linker-level LTO configuration.

### 6. Profile-guided optimisation (PGO)

```bash
# 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

| Symptom | Likely cause | Fix |
|---------|-------------|-----|
| `undefined reference to 'foo'` | Missing `-lfoo` or wrong link order | Add `-lfoo`; move `-l` flags after object files |
| `multiple definition of 'x'` | Variable defined (not just declared) in a header | Add `extern` in header, define in one `.c` |
| `implicit declaration of function` | Missing `#include` | Add the header |
| `warning: incompatible pointer types` | Wrong cast or missing prototype | Fix the type; check headers |
| ABI errors with C++ | Mixed `-std=` or different `libstdc++` | Unify `-std=` across all TUs |
| `relocation truncated` | Overflow on a 32-bit relative relocation | Use `-mcmodel=large` or restructure code |

For sanitizer reports, use `skills/runtimes/sanitizers`.

### 9. Useful one-liners

```bash
# 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](references/flags.md).
For common error patterns and examples, see [references/examples.md](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

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Похожие скиллы

Все скиллы по теме «Языки программирования» →
migrate-to-rust официальный google Скилл переносит кодовые базы C++, Fortran, Java, Python и C на безопасный Rust с замерами производительности. CX Codex 538установок Compiler Explorer compiler-explorer Даёт агенту доступ к godbolt.org: компилирует код, показывает ассемблер и делится ссылками. Пригодится, когда нужно разобрать, во что превращается ваш C++ или Rust. CX Codex +1 ★ 19 148звёзд репо mojo-syntax modular Скилл исправляет устаревший синтаксис Mojo в ответах ассистента. Помогает при написании, ревью и переносе кода под свежие версии компилятора. CX Codex +1 2 900установок build-fix codewithmukesh Запускает автономный цикл починки сборки и тестов в проектах на .NET. Скилл разбирает ошибки компилятора, исправляет код и останавливается при регрессиях. CX Codex +1 2 800установок react-19 prowler-cloud Скилл для работы с React 19 и React Compiler: без ручной мемоизации, серверные компоненты первыми, ref как проп. CX Codex +1 671установок reference-compiler-cli angular Скилл объясняет внутреннее устройство Angular Compiler (ngtsc) — как работает компиляция декораторов, система traits и трансформация кода. Подключайте его перед работой с packages/compiler-cli. CX Codex +1 909установок

Из того же набора62

llvm Скилл для работы с LLVM IR: генерация промежуточного представления, прогон пассов через opt, понижение до ассемблера через llc и разбор упущенных оптимизаций. CX Codex +1 899установок core-dumps Учит агента включать core dumps, грузить их в GDB или LLDB и снимать стек без повторного запуска упавшей программы. CX Codex +1 764установок linux-perf Ведёт агента по perf на Linux: сэмплирование, счётчики железа, поиск горячих функций и сборка флеймграфов. Полезен, когда программа тормозит, а непонятно где. CX Codex +1 753установок clang Настраивает компилятор Clang, флаги оптимизации и линковщик lld в проектах на C и C++. Помогает включить статический анализ и ThinLTO. CX Codex +1 722установок cross-gcc Проведёт агента через настройку кросс-компиляции на GCC: триплеты, sysroot, pkg-config, тесты под QEMU и разбор типовых ошибок. CX Codex +1 682установок valgrind Ведёт агента по инструментам Valgrind: Memcheck ищет утечки и use-after-free, Cachegrind и Callgrind показывают промахи кэша и граф вызовов, Massif — рост кучи. CX Codex +1 678установок flamegraphs Помогает собирать SVG-флеймграфы из данных профилировщиков и находить узкие места по ширине и высоте фреймов в стеке. CX Codex +1 673установок assembly-arm Скилл, который помогает агенту читать и писать ассемблер AArch64 и ARM Thumb: регистры, соглашения вызова, инлайн-asm и NEON. CX Codex +1 656установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой