этозябриг
Вижу не всё ещё разобрались как компилировать программы в линуксе
Попробую объяснить.
вступление:
программы обычно распространяются в упакованных архивах, это файлы с расширениями
<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
Поэтому придумали конфигураторы
![Smiley :)](https://forum.ubuntu.ru/Smileys/webby/smiley.gif)
Которые "изучают" систему и в соответствии с полученными знаниями создают Makefile
но на конфигураторе они не остановились и придумали конфигураторы конфигураторов =)
на стом они остановились
![Smiley :)](https://forum.ubuntu.ru/Smileys/webby/smiley.gif)
Для сборки нам нужны компиляторы они прописаны в зависимостях пакета
build-essential так что достаточно установить его со всеми зависимостями.
Ещё нужны autoconf и все automake которые найдёте
![Smiley :)](https://forum.ubuntu.ru/Smileys/webby/smiley.gif)
.
Итак чтобы собрать что то из исходниктов
нужно сначала "собрать" конфигуратор
как собрать конфигуратор описано в файле 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 пакет)
Можно ещё поискать с помощью
http://packages.ubuntu.com/В ведя имя библиотеки в поиск по содержимому пакетов, также если найдётся dev и не dev нужны оба
![Smiley :)](https://forum.ubuntu.ru/Smileys/webby/smiley.gif)
.
ну или просто погуглить.
Если эта информация оказалась полезной для вас, то советую почитать
http://rus-linux.net/MyLDP/HOWTO-ru/DOS-Win-to-Linux-HOWTO/DOS-Win-to-Linux-HOWTO.htmlВот тут
http://forum.beep-media-player.org/viewthread.php?tid=182не плохой список что нужно установить для сборки из исходников
пакеты с буквами mm в конце описания это пакеты для C++ программ.
Список для bmpx но подойдёт почти для любой GTK2/Gnome программы.
Так что если не получается собрать посмотрите на этот список
сверьте с тем что у вас стоит и может что умное в голову придёт
![Smiley :)](https://forum.ubuntu.ru/Smileys/webby/smiley.gif)
- 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