Это старая версия документа.
Содержание
Краткое описание руководства
Необходимое программное обеспечение
Пакеты с буквами mm в конце описания — это пакеты для C++ программ. Список для bmpx, но подойдёт почти для любой GTK2/Gnome программы. Так что если не получается собрать, то посмотрите на этот список и сверьте с тем что у вас установлено.
Compile: | Runtime: | |
---|---|---|
X | libx11-dev | libx11-6 |
GlibMM | libglibmm-2.4-dev | libglibmm-2.4-1c2a |
GTK+ | libgtk2.0-dev,gtk-doc-tools | libgtk2.0-0 |
GTKMM | libgtkmm-2.4-dev | libgtkmm-2.4-1c2a |
Glade | libglade2-dev | libglade2-0 |
GladeMM | libglademm-2.4-dev | libglademm-2.4-1c2a |
XML | libxml2-dev | libxml2 |
XML++ | libxml++2.6-dev | libxml++2.6c2a |
DBus | libdbus-1-dev,libdbus-glib-1-dev | libdbus-1-2,libdbus-glib-1-2 |
Alsa | libasound2-dev | libasound2 |
HAL | libhal-dev,libhal-storage-dev | libhal1,libhal-storage1 |
Gamin | libgamin-dev | libgamin0 |
Neon | libneon25-dev | libneon25 |
TagLib | libtagc0-dev | libtagc0 |
Startup-Notify | libstartup-notification0-dev | libstartup-notification0 |
Boost | libboost-dev,libboost-filesystem-dev | libboost-filesystem1.33.1 |
MusicBrainz | libmusicbrainz4-dev | libmusicbrainz4c2a |
GStreamer | libgstreamer0.10-dev,libgstreamer-plugins-base0.10-dev | libgstreamer0.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 на форуме forum.ubuntu.ru