|
|||||||
Что использовать для статической сборки программ
Время создания: 27.03.2016 21:30
Текстовые метки: статическая сборка, linux, компиляция
Раздел: Компьютер - Программирование - Компилятор GCC
Запись: xintrea/mytetra_syncro/master/base/1459103448zmekka288w/text.html на raw.github.com
|
|||||||
|
|||||||
Statifier Когда-то давно, под Linux был такой проект - statifier. Он есть и сейчас, и даже немного шевелится. Вот его сайт: http://statifier.sourceforge.net/ Чтобы преобразовать динамически слинкованный бинарник в статический, нужно запустить команду statifier <inputBin> <outputBin> Вот и все. К сожалению, похоже, что этот проект заточен только под Linux семейства RedHat (о чем недвусмысленно пишут на сайте), поэтому толку от полученного бинарника немного. У меня получалось собрать через Statifier бинарник в RedHat и запустить его на Fedora и AltLinux. Но он же не работал на Debian и Ubuntu. Использование нестандартных системных библиотек Одна из проблем, почему полученные через statifier бинарники неработоспособны на других дистрибутивах сводится к тому, что они не могут работать с другой версией glibc. То есть решается только половина задачи - сторонние библиотеки не нужны, но мажорную версию glibc нужно иметь ту же самую, что и у разработчика. Чтобы обойти эту проблему, люди используют, как минимум, два метода:
Здесь следует пояснить, что из себя предстваляют нестандартные библиотеки, которые могут заменить glibc. musl - новая стандартная Си-библиотека, ориентированная для использования в Linux-устройствах нового поколения. Библиотека имеет небольшой размер и высокую производительность, а разработчики стараются соблюдать стандарты POSIX. Код Musl поставляется под свободной лицензией MIT, допускающей использование библиотеки в закрытых проектах. uClibc — стандартная библиотека языка программирования C, предназначенная для встраиваемых систем на базе Linux. uClibc была разработана для поддержки uCLinux (специальная редакция ядра Linux, способная работать без блока управления памятью [MMU]) и таким образом подходящая для микроконтроллеров. (буква u есть адаптация греческой буквы µ, означающей «микро»). uClibc — свободное программное обеспечение, распространяемое под GNU LGPL. Касательно методов компиляции с использованием вышеназванных библиотек, есть следующая информация. Существует инструмент Buildroot: https://buildroot.org/. Официальная документация так описывает область его применения (вольный превод): Buildroot является инструментом, который упрощает и автоматизирует процесс создания целостной системы Linux для встраиваемых систем с помощью кросс-компиляции. Buildroot с помощью кросс-компиляции способен генерировать набор основных инструментов, корневую файловую систему, образ ядра Linux и загрузчик. Buildroot может быть использован для любой части системы, независимо от других частей. В Buildroot можно, например, использовать существующий набор инструментов кросс-компиляции, и строить только корневую файловую систему. Казалось бы, что этот инструментарий весьма далек от задачи получения статического бинарника. Однако в нем есть функционал по сборке кросс-компилятора под нужную архитектуру, с нужным uClibc или musl и для нужных хедеров ядра. А потом с полученным компилятором без проблем можно собирать статические бинарники. Как использовать Buildroot можно прочитать в англоязычной документации, которая написана весьма подробно. Информации в рунете по этой теме крайне мало. Но может быть, эта заметка кого-то направит на правильный путь. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|