Краткое описание руководстваЭто руководство поможет начинающим пользователям в компилировании и установке программ из исходных кодов.
Необходимое программное обеспечениеПакеты с буквами mm в конце описания — это пакеты для C++ программ. Список для bmpx, но подойдёт почти для любой GTK2/Gnome программы. Так что если не получается собрать, то посмотрите на этот список и сверьте с тем что у вас установлено.
ВступлениеПрограммы обычно распространяются в упакованных архивах, это файлы с расширениями
Код: |
<some_app_name>.tar.gz (иногда .tgz) <some_app_name>.tar.bz2 |
Нужно понимать отличие между архиватором и упаковщиком.
Для архивации директорий и файлов используется программа
tar; результатом её работы является файл с расширением
.tar. Грубо говоря, это копия файловой системы - директорий и файлов с их атрибутами и правами доступа, помещённая в один файл.
Данный файл по размеру будет чуть больше, чем суммарный размер файлов, которые были архивированы. Поэтому (а может и по другой причине) используют упаковщики - программы, которые позволяют уменьшить размер файла без потери данных.
Не многие упаковщики умеют работать с несколькими файлами, но зато с одним справляются на ура. Результатом работы упаковщика
gzip будет файл с расширением
.gz. Так, файл, заканчивающийся на
.tar.gz - это результат работы двух программ.
tar.gz аналогичен файлу с расширением
.zip, только
.zip не позволяет сохранить все атрибуты и права доступа. Таким образом, чтобы распаковать файл
.tar.gz, нужно воспользоваться двумя программами.
gunzip распакует файл, например, с помощью команды
Код: |
gunzip -d <some_app_name>.tar.gz |
в результате получим файл
а команда
Код: |
tar -x <some_app_name>.tar |
разархивирует его.
К счастью для нас, GNU-версия программы
tar умеет распаковывать, поэтому не нужно вызывать
gunzip, а можно просто указать программе
tar, что файл нужно cначала распаковать. Например, команда
Код: |
tar -z -x <some_app_name>.tar.gz |
сразу распакует и разархивирует. Отличие файлов с расширениями
Код: |
<some_app_name>.tar.gz |
и
Код: |
<some_app_name>.tar.bz2 |
лишь в том, что использовались разные упаковщики, для второго файла использовалась команда
bzip2. Для распаковки <some_app_name>.tar.bz2 можно выполнить команду
Код: |
tar -j -x <some_app_name>.tar.bz2 |
Немного теории сборкиДля сборки программ в GNU/Linux используется (в основном) программа
make, которая запускает инструкции из
Makefile, но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути,где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать
Makefile. Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают
Makefile. Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов
…на этом они остановились
Для сборки нам нужны компиляторы: они прописаны в зависимостях пакета
build-essential, так что достаточно установить его со всеми зависимостями. Ещё нужны
autoconf и все
automake которые найдёте
.
Итак, чтобы собрать что-то из исходников, нужно сначала собрать конфигуратор; как собрать конфигуратор, описано в файле configure.in. А собирается конфигуратор следующими командами
т.е. достаточно запустить этот скрипт. А если нет скриптов bootstrap или autogen.sh, то можно выполнить последовательно следующие команды:
Код: |
aclocal autoheader automake --gnu --add-missing --copy --foreign autoconf -f -Wall |
Все эти команды используют файл
configure.in. После выполнения этих команд создастся файл
configure. Вот теперь если вы запустите конфигуратор командой
(находясь в папке с исходными кодами), он проанализирует вашу систему, и сообщит, чего хватает/не хватает. Возможно покажет, какие опции будущей программы будут доступны и/или пути, куда будет установлена скомпилированная программа (после выполнения
make install). Конфигуратор построит Makefile основываясь на полученных знаниях и файле
makefile.am. Можно передать конфигуратору опции, предусмотренные в исходниках программы, которые позволяют включать/отключать те или иные возможности программы, обычно узнать о них можно командой
Также есть набор стандартных опций, вроде –prefix= , которая указывает, какой каталог использовать для установки. Для Ubuntu обычно
или
БЕЗ слеша в конце! Теперь можно запустить процесс сборки самой программы командой
Для сборки достаточно привелегий обычного пользователя. Окончанием сборки можно считать момент, когда команды в консоли перестанут «беспорядочно» выполняться и не будет слова
error. Теперь всё скомпилировано и готово для установки. На данном этапе можно запустить
но уже с привилегиями root, например, командой
или
для того, чтобы сгенерировать deb пакет. Но хочу предупредить -
checkinstall не все исходники понимает, поскольку автор программы может написать особые скрипты по установке и checkinstall их не поймёт.
Ничего страшного в том, что вы установите программу не пакетом, а командой
make install нет, программу всегда можно удалить командой
выполнив её в корневой директории исходников программы (там где вы запускали make install).
Ещё есть возможность установить пакет не в корень, а в другую директорию, из которой потом можно самому вручную собрать пакет, используя команду
Часто на этапе конфигурации конфигуратор сообщает, что нехватает той или иной библиотеки. Название библиотеки, которое он сообщает, не всегда соответствует названию пакета в Ubuntu. Из собственного опыта могу посоветовать поискать в Синаптике нужный пакет, исключив префикс lib, если нашлось несколько пакетов различающихся приставкой -dev в названии, то вам нужно установить именно -dev пакет (обычно он тянет за собой и не -dev пакет). Можно ещё поискать с помощью
http://packages.ubuntu.com/, введя имя библиотеки в поиск по содержимому пакетов, аналогично, если найдётся dev и не dev, нужны оба . Ну или просто поискать в Google.