# dynamic-linking

Скилл для работы с динамической линковкой в Linux: разбирает ошибки загрузки .so, настройку RPATH и RUNPATH, версионирование soname.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 600 установок · ★ 267
- Автор: mohitmishra786
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/mohitmishra786/low-level-dev-skills/tree/HEAD/skills/binaries/dynamic-linking/SKILL.md
- Обновлён: 2026-06-27
- HTML: https://affpapa.org/nevibecode/skills/dynamic-linking

## Что делает

Скилл ведёт агента по динамической линковке в Linux: сборка разделяемых библиотек, конфигурация RPATH и RUNPATH, версионирование soname, плагины через `dlopen`/`dlsym`, перехват функций через `LD_PRELOAD` и управление видимостью символов. Активируется сам, когда в запросе всплывают `cannot open shared object file`, `LD_LIBRARY_PATH`, `soname` или вопросы про порядок поиска библиотек.

Внутри — восемь разделов с командами и кодом. Сборка библиотеки через `gcc -fPIC` и `-shared` с soname, таблица версий (PATCH, MINOR, MAJOR), разница между RPATH и RUNPATH с рекомендацией в пользу RUNPATH для гибкости при развёртывании, порядок поиска от `DT_RPATH` до `/lib` и `/usr/lib`. Отладка через `LD_DEBUG=libs` и `ldd -v`. Есть шаблон плагина на C с `RTLD_NOW` и `RTLD_LOCAL`, пример перехвата `malloc` через `dlsym(RTLD_NEXT, ...)` и version script для скрытия внутренних символов.

Для работы нужен компилятор GCC и утилиты `readelf`, `objdump`, `chrpath`, `nm`. Плагины линкуются с `-ldl`. Если бинарник собран на новой glibc, на старой системе он упадёт с `version 'GLIBC_2.29' not found` — это повод проверить, где именно вы собираете релиз.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill dynamic-linking -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/dynamic-linking/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/dynamic-linking/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill dynamic-linking -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/dynamic-linking/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill dynamic-linking -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/dynamic-linking/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install mohitmishra786/low-level-dev-skills dynamic-linking
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/dynamic-linking/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill dynamic-linking -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/binaries/dynamic-linking
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/dynamic-linking/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill dynamic-linking -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/mohitmishra786/low-level-dev-skills/tree/HEAD/skills/binaries/dynamic-linking/SKILL.md

## Когда брать
- разобраться, почему бинарник не находит свою .so при запуске
- выбрать между RPATH и RUNPATH для переносимой установки
- собрать систему плагинов на dlopen и dlsym
- перехватить вызов функции в чужом бинарнике через LD_PRELOAD
- скрыть внутренние символы библиотеки, чтобы не было конфликтов

## Примеры запросов агенту
- почему мой бинарник падает с cannot open shared object file
- как правильно выставить RPATH через $ORIGIN для переносимой сборки
- покажи пример плагина на dlopen и dlsym с обработкой ошибок

## Похожие
- [analyzing-linux-elf-malware](https://affpapa.org/nevibecode/skills/analyzing-linux-elf-malware.md) — скилл · 457 установок
- [dwarf-expert](https://affpapa.org/nevibecode/skills/dwarf-expert.md) — скилл · 5200 установок
- [dali-dynamic-mode](https://affpapa.org/nevibecode/skills/dali-dynamic-mode.md) — скилл · 2100 установок
- [core-dynamic-skills](https://affpapa.org/nevibecode/skills/core-dynamic-skills.md) — скилл · 1800 установок
- [nextjs-dynamic-routes-params](https://affpapa.org/nevibecode/skills/nextjs-dynamic-routes-params.md) — скилл · 303 установки
- [gke-ai-troubleshooting-tpu-dynamic-slices-monitoring](https://affpapa.org/nevibecode/skills/gke-ai-troubleshooting-tpu-dynamic-slices-monitoring.md) — скилл · 3700 установок

Из того же набора: [mohitmishra786/low-level-dev-skills](https://affpapa.org/nevibecode/by/mohitmishra786/low-level-dev-skills.md) — 62 карточки

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
