Это старая версия документа.


Краткое описание руководства

Необходимое программное обеспечение

Пакеты с буквами mm в конце описания — это пакеты для C++ программ. Список для bmpx, но подойдёт почти для любой GTK2/Gnome программы. Так что если не получается собрать, то посмотрите на этот список и сверьте с тем что у вас установлено.

Compile: Runtime:
X libx11-devlibx11-6
GlibMMlibglibmm-2.4-devlibglibmm-2.4-1c2a
GTK+ libgtk2.0-dev,gtk-doc-toolslibgtk2.0-0
GTKMM libgtkmm-2.4-devlibgtkmm-2.4-1c2a
Gladelibglade2-devlibglade2-0
GladeMMlibglademm-2.4-devlibglademm-2.4-1c2a
XMLlibxml2-devlibxml2
XML++libxml++2.6-devlibxml++2.6c2a
DBuslibdbus-1-dev,libdbus-glib-1-devlibdbus-1-2,libdbus-glib-1-2
Alsalibasound2-devlibasound2
HALlibhal-dev,libhal-storage-devlibhal1,libhal-storage1
Gaminlibgamin-devlibgamin0
Neonlibneon25-devlibneon25
TagLiblibtagc0-devlibtagc0
Startup-Notifylibstartup-notification0-devlibstartup-notification0
Boostlibboost-dev,libboost-filesystem-devlibboost-filesystem1.33.1
MusicBrainzlibmusicbrainz4-devlibmusicbrainz4c2a
GStreamerlibgstreamer0.10-dev,libgstreamer-plugins-base0.10-devlibgstreamer0.10-0,libgstreamer-plugins-base0.10-0

Вступление

Программы обычно распространяются в упакованных архивах, это файлы с расширениями

<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

в результате получим файл

<some_app_name>.tar

а команда

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

т.е. достаточно запустить этот скрипт. А если нет скриптов bootstrap или autogen.sh, то можно выполнить последовательно следующие команды:

aclocal
autoheader
automake --gnu --add-missing --copy --foreign
autoconf -f -Wall

Все эти команды используют файл configure.in. После выполнения этих команд создастся файл configure. Вот теперь если вы запустите конфигуратор командой

./configure

(находясь в папке с исходными кодами), он проанализирует вашу систему, и сообщит, чего хватает/не хватает. Возможно покажет, какие опции будущей программы будут доступны и/или пути, куда будет установлена скомпилированная программа (после выполнения make install). Конфигуратор построит Makefile основываясь на полученных знаниях и файле makefile.am. Можно передать конфигуратору опции, предусмотренные в исходниках программы, которые позволяют включать/отключать те или иные возможности программы, обычно узнать о них можно командой

./configure --help

Также есть набор стандартных опций, вроде –prefix= , которая указывает, какой каталог использовать для установки. Для Ubuntu обычно

--prefix=/usr

или

--prefix=/usr/local

БЕЗ слеша в конце! Теперь можно запустить процесс сборки самой программы командой

make

Для сборки достаточно привелегий обычного пользователя. Окончанием сборки можно считать момент, когда команды в консоли перестанут «беспорядочно» выполняться и не будет слова error. Теперь всё скомпилировано и готово для установки. На данном этапе можно запустить

make install

но уже с привилегиями root, например, командой

sudo make install

или

checkinstall

для того, чтобы сгенерировать deb пакет. Но хочу предупредить - checkinstall не все исходники понимает, поскольку автор программы может написать особые скрипты по установке и checkinstall их не поймёт.

Ничего страшного в том, что вы установите программу не пакетом, а командой make install нет, программу всегда можно удалить командой

make uninstall

выполнив её в корневой директории исходников программы (там где вы запускали make install).

Ещё есть возможность установить пакет не в корень, а в другую директорию, из которой потом можно самому вручную собрать пакет, используя команду

fakeroot
Часто на этапе конфигурации конфигуратор сообщает, что нехватает той или иной библиотеки. Название библиотеки, которое он сообщает, не всегда соответствует названию пакета в Ubuntu. Из собственного опыта могу посоветовать поискать в Синаптике нужный пакет, исключив префикс lib, если нашлось несколько пакетов различающихся приставкой -dev в названии, то вам нужно установить именно -dev пакет (обычно он тянет за собой и не -dev пакет). Можно ещё поискать с помощью http://packages.ubuntu.com/, введя имя библиотеки в поиск по содержимому пакетов, аналогично, если найдётся dev и не dev, нужны оба :-). Ну или просто поискать в Google.

Ссылки

Обсуждение проблем с компиляцией и установкой программ в Ubuntu на форуме forum.ubuntu.ru