.TH MCPU-LD 1 "Октябрь 2026" "LibMCPU" "Команды пользователя" .SH ИМЯ mcpu-ld \- компоновщик объектов, архивов и shared libraries MCPU .SH СИНТАКСИС .B mcpu-ld .RI [ опции-компоновки ] " -o output input ..." .SH ОПИСАНИЕ .B mcpu-ld компонует MELF ET_REL objects и статические библиотеки MCPU. Он создаёт partial ET_REL, полностью статический ABI-v1 ET_EXEC, frozen ABI-v3 startup-dynamic ET_EXEC или ABI-v3 ET_DYN shared object. .PP Без .BR -r , .B --shared и .B --dynamic по умолчанию создаётся статический ABI-v1 ET_EXEC. .SH РЕЖИМЫ ВЫХОДА .TP .B -r Создать один partial-link MELF ET_REL. Неразрешённые strong symbols и RELA могут остаться для последующей final link. STACK, HEAP, SONAME и shared objects к этому режиму не относятся. .TP .B --shared Создать frozen ABI-v3 MELF ET_DYN. Обязателен логический .BR --soname . Shared object может иметь только allocated .text/.data/.bss и не владеет lifecycle, model spaces, STACK или HEAP. .TP .B --dynamic Создать frozen ABI-v3 startup-dynamic MELF ET_EXEC. Normal dependencies записываются как DT_NEEDED SONAME. .SH AUTOMATIC HLL CRT Для final static/dynamic ET_EXEC output mcpu-ld сначала анализирует явно перечисленные входные ET_REL objects и только затем обрабатывает -l libraries. Распознаются две compiler-normalized complete-program формы: .nf PROGRAM: strong GLOBAL/FUNC main + fini в одном ET_REL MODEL: strong GLOBAL/FUNC init + life + fini в одном ET_REL .fi .PP PROGRAM и MODEL roots взаимоисключающие. Incomplete или split MODEL definitions отклоняются; PROGRAM main/fini также должны принадлежать одному defining ET_REL. Смешивание HLL roots с низкоуровневым владением _start/_life является ошибкой. Library members и shared-library definitions не участвуют в классификации complete program. .PP После классификации mcpu-ld автоматически вставляет: .nf PROGRAM: crt0.o crti.o crtn.o MODEL: crt1.o crti.o crtn.o .fi CRT objects загружаются из /lib/mcpu, где — активный installation/system root. Отсутствующий или нечитаемый обязательный CRT object является fatal error. Поиска fallback CRT в другом root и перехода HLL link в low-level linking нет. .PP Low-level ET_EXEC inputs, самостоятельно владеющие _start/_life, компонуются без HLL CRT insertion. Режимы -r и --shared не выполняют HLL complete-program classification или CRT insertion. .SH SYSTEM ROOT И CONFIGURATION .TP .B --no-config Не читать mcpu-ld.conf; executable-derived runtime root и его default lib остаются активными. .TP .BI --sys-root= ПУТЬ Использовать ПУТЬ как MCPU system root, не читать configuration files и взять ПУТЬ/lib как системный каталог библиотек. Относительный путь разрешается от рабочего каталога запуска. .TP .BI --sys-root " ПУТЬ" Эквивалентная двухаргументная форма. .TP .B --dump-config Вывести effective MCPU configuration и завершиться. .TP .B --print-search-dirs Вывести effective library search directories в порядке поиска и завершиться. .SH БИБЛИОТЕКИ .TP .BI -L " каталог" .TQ .BI -L каталог Добавить явный каталог поиска. -L каталоги идут раньше configured system path. .TP .BI -l " имя" .TQ .BI -l имя Искать libИМЯ. ABI-v1 и -r рассматривают только libИМЯ.a; ABI-v3 dynamic/shared в каждом каталоге сначала рассматривает libИМЯ.so, затем libИМЯ.a. .TP .B --static Принудить все -l искать только libИМЯ.a, не меняя выбранный output mode. Архивные members встраиваются статически и не создают DT_NEEDED. .SH SHARED-LIBRARY IDENTITY .TP .BI --soname= ИМЯ .TQ .BI --soname " ИМЯ" Установить обязательный SONAME ABI-v3 ET_DYN. Логическое ИМЯ не должно содержать '/'. .SH ПАРАМЕТРЫ EXECUTABLE .TP .BI -o " файл" Записать результат в файл. .TP .BI --stack-size= размер Фиксированный размер STACK; положительный и кратный 16. Default 1048576. .TP .BI --heap-size= размер Начальный HEAP. Default 1048576. .TP .BI --heap-limit= размер Неизменяемый maximum HEAP. Default 1048576. .TP .B --no-heap Не создавать PT_MCPU_HEAP. .TP .BR -v ", " --verbose После успешной компоновки вывести краткую сводку о созданном MELF object. По умолчанию успешный запуск ничего не выводит. .TP .BR -h ", " --help Вывести справку. .TP .B --version Вывести имя программы, идентификатор инструментария MCPU и версию, затем завершить работу. .TP .B --dump-version Вывести только номер версии пакета MCPU и завершить работу. .PP Размер по умолчанию задаётся в байтах. Поддерживаются K/KiB, M/MiB, G/GiB; K, M, G используют двоичные множители. .SH АРХИВЫ И SYMBOL RESOLUTION Статические библиотеки MCPU — обычные deterministic UNIX ar containers с MELF ET_REL members. Member извлекается, когда он удовлетворяет текущему неразрешённому strong GLOBAL symbol. Один unresolved WEAK сам по себе member не вытягивает. .SH ФАЙЛЫ .TP .I /lib/mcpu/crt0.o, crt1.o, crti.o, crtn.o Обязательные automatic HLL CRT objects для final PROGRAM/MODEL executable link. .TP .I /etc/mcpu-ld.conf Configuration из переносимого дерева MCPU. .TP .I /etc/mcpu/mcpu-ld.conf Необязательный machine-wide override. .TP .I $HOME/.mcpu/etc/mcpu-ld.conf Необязательный user override. .SH СТАТУС ЗАВЕРШЕНИЯ Ноль при успехе; ненулевое значение при ошибке опций, validation, symbol resolution, relocation или записи результата. .SH ПРИМЕРЫ .nf mcpu-ld --stack-size=64K --no-heap -o program main.o helper.o mcpu-ld -r -o combined.o a.o b.o mcpu-ld --shared --soname=libfoo.so.1 -o libfoo.so.1.0.0 foo.o mcpu-ld --dynamic -L ./lib -lfoo -o program main.o .fi .SH СМ. ТАКЖЕ .BR mcpu-as (1), .BR mcpu-ar (1), .BR mcpu-run (1), .BR mcpu-readelf (1), .BR libmcpu (7)