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

cross-gcc — скилл для Claude Code: кросс-компиляция под ARM и RISC-V

Проведёт агента через настройку кросс-компиляции на GCC: триплеты, sysroot, pkg-config, тесты под QEMU и разбор типовых ошибок.

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

Что делает cross-gcc

Скилл описывает рабочий порядок сборки под чужую архитектуру с хоста x86-64. Агент сначала разбирается с триплетом — например, aarch64-linux-gnu для 64-битного ARM Linux или arm-none-eabi для bare-metal Cortex-M, — потом ставит тулчейн и только затем собирает код. Внутри есть таблица триплетов, команды установки для Debian и Ubuntu, примеры для C и C++ и отдельный случай сборки прошивки без стандартной библиотеки.

Дальше идут sysroot и pkg-config. Это два места, где кросс-сборка ломается чаще всего: без --sysroot линкер ищет библиотеки хоста, а pkg-config по умолчанию отдаёт хостовые пути. Скилл показывает, как выставить PKG_CONFIG_SYSROOT_DIR и PKG_CONFIG_LIBDIR и очистить PKG_CONFIG_PATH. Для CMake приведён готовый toolchain-файл с CMAKE_SYSROOT и режимами поиска, для autoconf — переменные CC, CXX, AR и флаг --host.

Проверка собранного бинарника идёт через QEMU: qemu-user-static для запуска Linux-бинарников и удалённая отладка через qemu-aarch64-static -g 1234 вместе с aarch64-linux-gnu-gdb. Отдельная таблица разбирает ошибки вроде wrong ELF class, cannot execute binary file и undefined reference to '__aeabi_*' — с причиной и способом починки. Если вы собираете под ARM, RISC-V или MIPS и уже видели хоть одну из этих строк, скилл сэкономит вам поиск по форумам.

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

  • собрать бинарник под AArch64 с x86-64 хоста
  • настроить sysroot, чтобы линкер не тянул хостовые библиотеки
  • заставить pkg-config возвращать пути целевой системы
  • собрать прошивку для Cortex-M без стандартной библиотеки
  • запустить и отладить кросс-бинарник под QEMU и GDB

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

  • Помоги настроить кросс-компиляцию под aarch64-linux-gnu для моего C-проекта
  • pkg-config отдаёт хостовые библиотеки в кросс-сборке — как это исправить?
  • Собери прошивку под cortex-m4 с arm-none-eabi и проверь её в QEMU

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

1Через Skills CLI (Vercel)

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

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

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

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

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

Вопросы о cross-gcc

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

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill cross-gcc -a claude-code. Файл скилла появится по пути ~/.claude/skills/cross-gcc/SKILL.md.

Что делает cross-gcc?

Ведёт агента по настройке кросс-компиляции на GCC: выбор триплета, установка тулчейна, sysroot, pkg-config, toolchain-файл для CMake и тестирование результата под QEMU.

Какие ошибки разбирает скилл?

cannot execute binary file, wrong ELF class, cannot find -lfoo, undefined reference to '__aeabi_*', выход релокации за диапазон и unrecognized opcode. Для каждой указана причина и что менять в командах сборки.

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

SKILL.md · MIT
---
name: cross-gcc
description: Cross-compilation with GCC skill for embedded and multi-architecture targets. Use when setting up cross-gcc toolchains, configuring sysroots, building for ARM/AArch64/RISC-V/MIPS from an x86-64 host, troubleshooting wrong-architecture errors, or running cross-compiled binaries under QEMU. Activates on queries about cross-compilation triplets, sysroot, pkg-config for cross builds, embedded toolchains, or Yocto/Buildroot integration.
---

# Cross-GCC

## Purpose

Guide agents through setting up and using cross-compilation GCC toolchains: triplets, sysroots, pkg-config, QEMU-based testing, and common failure modes.

## Triggers

- "How do I compile for ARM on my x86 machine?"
- "I'm getting 'wrong ELF class' or 'cannot execute binary file'"
- "How do I set up a sysroot for cross-compilation?"
- "pkg-config returns host libraries in my cross build"
- "How do I debug a cross-compiled binary with QEMU + GDB?"

## Workflow

### 1. Understand the triplet

A GNU triplet has the form `<arch>-<vendor>-<os>-<abi>` (often 3 or 4 parts):

| Triplet | Target |
|---------|--------|
| `aarch64-linux-gnu` | 64-bit ARM Linux (glibc) |
| `arm-linux-gnueabihf` | 32-bit ARM Linux hard-float |
| `arm-none-eabi` | Bare-metal ARM (no OS) |
| `riscv64-linux-gnu` | 64-bit RISC-V Linux |
| `x86_64-w64-mingw32` | Windows (MinGW) from Linux |
| `mipsel-linux-gnu` | Little-endian MIPS Linux |

### 2. Install the toolchain

```bash
# Debian/Ubuntu
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu

# For bare-metal ARM (Cortex-M)
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi

# Verify
aarch64-linux-gnu-gcc --version
```

### 3. Basic cross-compilation

```bash
# C
aarch64-linux-gnu-gcc -O2 -o hello hello.c

# C++
aarch64-linux-gnu-g++ -O2 -std=c++17 -o hello hello.cpp

# Bare-metal (no stdlib, no OS)
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 \
    -ffreestanding -nostdlib -T linker.ld -o firmware.elf startup.s main.c
```

### 4. Sysroot

A sysroot is a directory containing the target's headers and libraries. Required when your code links against target-specific libraries.

```bash
# Use a sysroot
aarch64-linux-gnu-gcc --sysroot=/path/to/aarch64-sysroot -O2 -o prog main.c

# Common sysroot sources:
# - Raspberry Pi: download from raspbian/raspios
# - Debian multiarch: debootstrap --arch arm64 bullseye /tmp/sysroot
# - Yocto/Buildroot: generated automatically in build output
```

Verify the sysroot is correct:

```bash
aarch64-linux-gnu-gcc --sysroot=/path/to/sysroot -v -E - < /dev/null 2>&1 | grep sysroot
```

### 5. pkg-config for cross builds

`pkg-config` will return host library paths by default. Override:

```bash
export PKG_CONFIG_SYSROOT_DIR=/path/to/sysroot
export PKG_CONFIG_LIBDIR=${PKG_CONFIG_SYSROOT_DIR}/usr/lib/aarch64-linux-gnu/pkgconfig:${PKG_CONFIG_SYSROOT_DIR}/usr/share/pkgconfig
export PKG_CONFIG_PATH=   # clear host path

pkg-config --libs libssl  # now returns target paths
```

### 6. CMake cross-compilation

Create a toolchain file `aarch64.cmake`:

```cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER   aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_SYSROOT /path/to/aarch64-sysroot)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
```

```bash
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=aarch64.cmake
cmake --build build
```

### 7. Test with QEMU

```bash
# User-mode emulation (Linux binaries, no full OS)
sudo apt install qemu-user-static

qemu-aarch64-static ./hello
# Or set binfmt_misc for transparent execution:
# Then just: ./hello

# GDB remote debug via QEMU
qemu-aarch64-static -g 1234 ./hello &
aarch64-linux-gnu-gdb -ex "target remote :1234" ./hello
```

### 8. Common errors

| Error | Cause | Fix |
|-------|-------|-----|
| `cannot execute binary file: Exec format error` | Running target binary on host without QEMU | Use `qemu-<arch>-static` |
| `wrong ELF class: ELFCLASS64` (or 32) | Wrong-architecture object linked | Check triplet; ensure all objects use same toolchain |
| `/usr/bin/ld: cannot find -lfoo` | Host library path used for cross-link | Set `--sysroot`; fix `PKG_CONFIG_LIBDIR` |
| `undefined reference to '__aeabi_*'` | Missing ARM ABI runtime | Link with `-lgcc` or `-lclang_rt.builtins` |
| `relocation R_AARCH64_ADR_PREL_PG_HI21 out of range` | Distance too large | Use `-mcmodel=large` or restructure |
| `unrecognized opcode` | Wrong `-mcpu` or `-march` | Set correct CPU flags for target |

### 9. Environment variables

```bash
# Tell build systems to use cross-compiler
export CC=aarch64-linux-gnu-gcc
export CXX=aarch64-linux-gnu-g++
export AR=aarch64-linux-gnu-ar
export STRIP=aarch64-linux-gnu-strip
export OBJDUMP=aarch64-linux-gnu-objdump

# For autoconf projects
./configure --host=aarch64-linux-gnu --prefix=/usr
```

For a reference on ARM-specific GCC flags, see [references/arm-flags.md](references/arm-flags.md).

## Related skills

- Use `skills/compilers/gcc` for GCC flag details
- Use `skills/debuggers/gdb` for remote debugging with `gdbserver`
- Use `skills/low-level-programming/assembly-arm` for AArch64 assembly specifics
- Use `skills/build-systems/cmake` for toolchain file setup

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

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

Все скиллы по теме «Языки программирования» →
arm-cortex-expert Ryan Snodgrass Пишет драйверы и прошивки под ARM Cortex-M: Teensy, STM32, nRF52, SAMD. Помогает, когда код работает с отладочной печатью и падает без неё. CX Codex ★ 41 729звёзд репо pulumi-arm-to-pulumi pulumi Переводит шаблоны Azure ARM и Bicep в программы Pulumi и помогает импортировать уже развёрнутые ресурсы Azure. CX Codex +1 2 100установок kernel-exploitation yaklang Справочник по анализу уязвимостей ядра Linux для ИИ-агента. Помогает настроить окружение в QEMU и разобрать механизмы защиты ядра вроде KASLR и SMEP. CX Codex +1 3 600установок azure-infra-engineer VoltAgent Community Проектирует и сопровождает инфраструктуру Azure: сети, Entra ID, PowerShell и Bicep. Нужен при подготовке развёртываний, проверок доступа и автоматизации операций. 245установок cloud-logging-cross-project-configuration официальный google Скилл настраивает и помогает искать проблемы в централизованном логировании Google Cloud между проектами. Подойдёт для общих бакетов и агрегации логов при чтении. CX Codex 4 800установок embedded-systems https://github.com/Jeffallan Скилл настраивает агента на разработку прошивок для STM32 и ESP32. Он помогает писать драйверы, FreeRTOS-задачи и оптимизировать потребление памяти и энергии. CX Codex +1 6 800установок

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

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установок gcc Подсказывает агенту флаги GCC для debug и release, разбирает ошибки компиляции и настраивает LTO с PGO. CX Codex +1 690установок 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установок cpu-cache-opt Разбирает промахи кэша, ложное разделение и раскладку данных. Пригодится, когда профилировщик показывает высокий cache miss rate. CX Codex +1 654установок

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

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