Форум русскоязычного сообщества Ubuntu


Автор Тема: [HOWTO] [Wiki] Как компилить  (Прочитано 253543 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Denis Konstantinov

  • Автор темы
  • Активист
  • *
  • Сообщений: 864
    • Просмотр профиля
[HOWTO] [Wiki] Как компилить
« : 06 Апрель 2006, 13:07:22 »
этозябриг

Вижу не всё ещё разобрались как компилировать программы в линуксе
Попробую объяснить.

вступление:
программы обычно распространяются в упакованных архивах, это файлы с расширениями
<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 пакет)
Можно ещё поискать с помощью http://packages.ubuntu.com/
В ведя имя библиотеки в поиск по содержимому пакетов, также если найдётся dev и не dev нужны оба :) .
ну или просто погуглить.

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

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 программы.
Так что если не получается собрать посмотрите на этот список
сверьте с тем что у вас стоит и может что умное в голову придёт :)

  •      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
« Последнее редактирование: 28 Январь 2011, 14:24:18 от stmc »
AltYo консоль для Gtk3 в стиле консоли quake http://forum.ubuntu.ru/index.php?topic=198594.0

bobrik

  • Гость
Re: Как компилить
« Ответ #1 : 06 Апрель 2006, 14:50:47 »
Надо в тултипы ссылки на такие ветки повешать, авось заметст;)
А вообще доступно. Но большинство прог поставляется с configure в комплекте.

Оффлайн Denis Konstantinov

  • Автор темы
  • Активист
  • *
  • Сообщений: 864
    • Просмотр профиля
Re: Как компилить
« Ответ #2 : 06 Апрель 2006, 14:59:54 »
Надо в тултипы ссылки на такие ветки повешать, авось заметст;)
А вообще доступно. Но большинство прог поставляется с configure в комплекте.
У меня нет возможности туда это засунуть. Я думаю что кому нужно будет тот найдёт.
Я старался обьсснить общий процесс сборки, и он будет работать даже если есть конфигуратор в комплекте с исходниками.
AltYo консоль для Gtk3 в стиле консоли quake http://forum.ubuntu.ru/index.php?topic=198594.0

Оффлайн rDi

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Как компилить
« Ответ #3 : 07 Апрель 2006, 12:14:13 »
Добрый день!
А как быть с процессом сборки deb пакетов?

Оффлайн dim4ik

  • Активист
  • *
  • Сообщений: 324
  • Kubuntu / Archlinux
    • Просмотр профиля
Re: Как компилить
« Ответ #4 : 07 Апрель 2006, 13:33:55 »
Добрый день!
А как быть с процессом сборки deb пакетов?

checkinstall

bobrik

  • Гость
Re: Как компилить
« Ответ #5 : 07 Апрель 2006, 15:15:54 »
Сборку Дения тоже объяснил;)
См. поиск

Оффлайн Denis Konstantinov

  • Автор темы
  • Активист
  • *
  • Сообщений: 864
    • Просмотр профиля
Re: Как компилить
« Ответ #6 : 07 Апрель 2006, 17:46:43 »
Добрый день!
А как быть с процессом сборки deb пакетов?
См топик "Как собрать/пересобрать deb пакет"  http://forum.ubuntu.ru/index.php?topic=2159.0
AltYo консоль для Gtk3 в стиле консоли quake http://forum.ubuntu.ru/index.php?topic=198594.0

Оффлайн itten

  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Как компилить
« Ответ #7 : 19 Июнь 2006, 03:19:46 »
Есть пару вопросов:
где брать все эти проги?
aclocal
autoheader
automake --gnu --add-missing --copy --foreign
autoconf -f -Wall
(в синаптике искал - нету)
как с понимаю они есть в pkg-config?? но как их тогда запустить??

установил все что можно,,, build-essential со всеми зависимостями,,
и где находится configure.in и makefile.am ?? в исходниках их нет (там только makefile и readme)

хочу скомпилить wmii. уже 2 часа бьюсь :(

руководство вообще туманное,, новечку ничего непонятно :)

bobrik

  • Гость
Re: Как компилить
« Ответ #8 : 19 Июнь 2006, 09:11:07 »
Скорее всего тут надо делать make -f Makefile.cvs, но покури ридми, проги могут по разному собираться...

Оффлайн Denis Konstantinov

  • Автор темы
  • Активист
  • *
  • Сообщений: 864
    • Просмотр профиля
Re: Как компилить
« Ответ #9 : 19 Июнь 2006, 12:43:37 »
Есть пару вопросов:
где брать все эти проги?
aclocal
autoheader
automake --gnu --add-missing --copy --foreign
autoconf -f -Wall
(в синаптике искал - нету)
как с понимаю они есть в pkg-config?? но как их тогда запустить??

установил все что можно,,, build-essential со всеми зависимостями,,
и где находится configure.in и makefile.am ?? в исходниках их нет (там только makefile и readme)

хочу скомпилить wmii. уже 2 часа бьюсь :(

руководство вообще туманное,, новечку ничего непонятно :)
Когад известны имена файлов но ты не знаешь в каком пакете они должны быть используй поиск
на сайте http://packages.ubuntu.com/

http://packages.ubuntu.com/cgi-bin/search_contents.pl?word=autoheader&searchmode=searchfiles&case=insensitive&version=dapper&arch=i386
AltYo консоль для Gtk3 в стиле консоли quake http://forum.ubuntu.ru/index.php?topic=198594.0

Оффлайн itten

  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Как компилить
« Ответ #10 : 19 Июнь 2006, 14:23:53 »
Ничего невыходит :(
Как с понял файлы configure.ac и configure.in должны находиться в папке с исходниками, их там нет.
itten@ubuntu:wmii # aclocal
autoheader: `configure.ac' or `configure.in' is required
Вообще непойму как тогда компилить?

хочу вот эту штуку:
http://wmii.de/download/wmii-3.1.tar.gz

Оффлайн Denis Konstantinov

  • Автор темы
  • Активист
  • *
  • Сообщений: 864
    • Просмотр профиля
Re: Как компилить
« Ответ #11 : 19 Июнь 2006, 15:56:11 »
Эх, чувствую себя учителем начальных классов

Детишки откройте файл wmii-3.1/README
и найдите параграф installation

itten прочитай пожалуйста что там написано?

installation
------------
Edit config.mk to match your local setup. wmii is installed into
the /usr/local hierarchy by default.

Afterwards enter the following command to build and install wmii (if
necessary as root):

    make clean install


Спасибо itten,
теперь делаем как нам только что прочитал itten.

откройте файл вашим любимым редактором
например vi config.mk

найдём строчку
PREFIX = /usr/local

и заменим её на
PREFIX = /usr

теперь сохраните файл и закройте редактор.


itten а какой коммандой нам теперь установить программу?

make clean install

Молодец itten!
Ведь можешь когда хочешь!
Садись три!
Следующий раз слушай внимательно на уроках, и обязательно делай домашнее задание!
AltYo консоль для Gtk3 в стиле консоли quake http://forum.ubuntu.ru/index.php?topic=198594.0

Оффлайн itten

  • Участник
  • *
  • Сообщений: 137
    • Просмотр профиля
Re: Как компилить
« Ответ #12 : 19 Июнь 2006, 16:40:11 »
так еще с самого начала делал... не катит.
кругом одни error, и в конце сообщения об ошибках.  ???

blitz.h:39: error: syntax error before "XFontStruct"
blitz.h:39: warning: no semicolon at end of struct or union
blitz.h:40: warning: data definition has no type or storage class
blitz.h:43: error: syntax error before '}' token
blitz.h:43: warning: data definition has no type or storage class
blitz.h:47: error: syntax error before "Drawable"
blitz.h:47: warning: no semicolon at end of struct or union
blitz.h:48: warning: data definition has no type or storage class
blitz.h:50: error: syntax error before "font"
blitz.h:50: warning: data definition has no type or storage class
blitz.h:51: error: syntax error before "rect"
blitz.h:51: warning: data definition has no type or storage class
blitz.h:52: error: syntax error before '*' token
blitz.h:52: warning: data definition has no type or storage class
blitz.h:54: error: syntax error before '}' token
blitz.h:54: warning: data definition has no type or storage class
blitz.h:57: error: syntax error before '*' token
blitz.h:58: error: syntax error before '*' token
blitz.h:61: error: syntax error before '*' token
blitz.h:64: error: syntax error before '*' token
blitz.h:65: error: syntax error before '*' token
blitz.h:68: error: syntax error before '*' token
blitz.h:70: error: syntax error before '*' token
..................
wmiimenu.c:145: error: request for member `rect' in something not a structure or union
wmiimenu.c:150: error: request for member `data' in something not a structure or union
wmiimenu.c:151: error: request for member `rect' in something not a structure or union
wmiimenu.c:152: error: request for member `rect' in something not a structure or union
wmiimenu.c:152: error: request for member `font' in something not a structure or union
wmiimenu.c:152: error: request for member `data' in something not a structure or union
wmiimenu.c:153: error: request for member `rect' in something not a structure or union
wmiimenu.c:153: error: request for member `width' in something not a structure or union
wmiimenu.c:154: error: request for member `rect' in something not a structure or union
wmiimenu.c:154: error: request for member `width' in something not a structure or union
wmiimenu.c:155: error: request for member `rect' in something not a structure or union
wmiimenu.c:155: error: request for member `height' in something not a structure or union
wmiimenu.c:157: error: request for member `color' in something not a structure or union
wmiimenu.c:161: error: request for member `color' in something not a structure or union
wmiimenu.c:164: error: request for member `rect' in something not a structure or union
wmiimenu.c:167: error: request for member `color' in something not a structure or union
..............
area.c:289: error: dereferencing pointer to incomplete type
area.c:289: error: dereferencing pointer to incomplete type
area.c:290: error: dereferencing pointer to incomplete type
area.c:294: error: dereferencing pointer to incomplete type
area.c: At top level:
area.c:301: error: syntax error before "is_of_area"
area.c: In function `is_of_area':
area.c:304: error: dereferencing pointer to incomplete type
area.c:305: error: dereferencing pointer to incomplete type
area.c:306: error: `True' undeclared (first use in this function)
area.c:307: error: `False' undeclared (first use in this function)
area.c: In function `sel_client_of_area':
area.c:314: error: dereferencing pointer to incomplete type
area.c:314: error: dereferencing pointer to incomplete type
area.c:314: error: dereferencing pointer to incomplete type
make[1]: *** [area.o] Ошибка 1
make[1]: Leaving directory `/usr/src/wmii-3.1/cmd/wm'
make: *** [all] Ошибка 2
« Последнее редактирование: 19 Июнь 2006, 16:45:40 от itten »

Оффлайн Denis Konstantinov

  • Автор темы
  • Активист
  • *
  • Сообщений: 864
    • Просмотр профиля
Re: Как компилить
« Ответ #13 : 20 Июнь 2006, 12:23:04 »
Ты помимо стого ещё что нибудь будешь компилить? Могу скомпиленные пакеты выслать, а так тебе нужно установить нужные dev пакеты. Например xlibs-dev возможно много чего ещё.
AltYo консоль для Gtk3 в стиле консоли quake http://forum.ubuntu.ru/index.php?topic=198594.0

bobrik

  • Гость
Re: Как компилить
« Ответ #14 : 26 Июнь 2006, 23:09:35 »
Для любой Gnome-integrated программы ;)

 

Страница сгенерирована за 0.147 секунд. Запросов: 23.