Показать сообщение отдельно
Старый 07.11.2008, 12:48   #1
Banned
 
Регистрация: 21.08.2007
Сообщений: 23
Репутация: 53
Exclamation FAQ: Как компилить програмы из исходников!

вступление:
программы обычно распространяются в упакованных архивах, это файлы с расширениями
Код:
<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


немного теории:
Для сборки программ в линуксе используется (в основном) программа make
Которая запускает инструкции из Makefile
но поскольку дистрибутивов линукса много и они все разные то для того чтобы собрать
программу нужно для каждого дистрибутива отдельно прописывать пути где какие библиотеки, заголовочные файлы лежат.
Программисты рехнулись бы изучать каждый дистрибутив и для каждого отдельно создавать 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

P.S.
Часто на этапе конфигурации конфигуратор ругается что нехватает той или иной библиотеки. название библиотеки которое он сообщает не всегда соответствует названию пакета в Ubuntu. Из собственного опыта могу посоветовать поискать нужный пакет исключив префикс lib , если нашлось несколько пакетов различающихся приставкой -dev в названии то вам нужно установить именно -dev пакет (обычно он тянет за собой и не -dev пакет)
Можно ещё поискать с помощью [Для просмотра ссылок требуется регистрация. Зарегистрироваться...]
В ведя имя библиотеки в поиск по содержимому пакетов, также если найдётся dev и не dev нужны оба .
ну или просто погуглить.

Если эта информация оказалась полезной для вас, то советую почитать

[Для просмотра ссылок требуется регистрация. Зарегистрироваться...]


Вот тут [Для просмотра ссылок требуется регистрация. Зарегистрироваться...]
не плохой список что нужно установить для сборки из исходников
пакеты с буквами mm в конце описания это пакеты для C++ программ.
Список для bmpx но подойдёт почти для любой GTK2/Gnome программы.
Так что если не получается собрать посмотрите на этот список
сверьте с тем что у вас стоит и может что умное в голову придёт

X
* Compile: libx11-dev
* Runtime: libx11-6
GlibMM
* Compile: libglibmm-2.4-dev
* Runtime: libglibmm-2.4-1c2a
GTK+
* Compile: libgtk2.0-dev gtk-doc-tools
* Runtime: libgtk2.0-0
GTKMM
* Compile: libgtkmm-2.4-dev
* Runtime: libgtkmm-2.4-1c2a
Glade
* Compile: libglade2-dev
* Runtime: libglade2-0
GladeMM
* Compile: libglademm-2.4-dev
* Runtime: libglademm-2.4-1c2a
XML
* Compile: libxml2-dev
* Runtime: libxml2
XML++
* Compile: libxml++2.6-dev
* Runtime: libxml++2.6c2a
DBus
* Compile: libdbus-1-dev libdbus-glib-1-dev
* Runtime: libdbus-1-2 libdbus-glib-1-2
Alsa
* Compile: libasound2-dev
HAL
* Compile: libhal-dev libhal-storage-dev
* Runtime: libhal1 libhal-storage1
Gamin
* Compile: libgamin-dev
* Runtime: libgamin0
Neon
* Compile: libneon25-dev
* Runtime: libneon25
TagLib
* Compile: libtagc0-dev
* Runtime: libtagc0
Startup-Notify
* Compile: libstartup-notification0-dev
* Runtime: libstartup-notification0
Boost
* Compile: libboost-dev libboost-filesystem-dev
* Runtime: libboost-filesystem1.33.1
MusicBrainz
* Compile: libmusicbrainz4-dev
* Runtime: libmusicbrainz4c2a
GStreamer
* Compile: libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
* Runtime: libgstreamer0.10-0 libgstreamer-plugins-base0.10-0

__________________________________________________ _______

Если помогло жмем СПАСИБО
Dogy вне форума
 
Ответить с цитированием Вверх
 
Время генерации страницы 0.08199 секунды с 9 запросами