Русскоязычное сообщество Ubuntu Linux
*

Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Войти

 Общаться с другими пользователями Ubuntu можно в Jabber конференции
ubuntu@conference.jabber.ru
Русскоязычное сообщество Ubuntu Linux  |  Разработка  |  Сборка пакетов  |  Тема: Как компилить [уже в Wiki]
Страниц: [1] 2 3 ... 28   Вниз
Печать
Автор Тема: Как компилить [уже в Wiki]  (Прочитано 111591 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Denis Konstantinov
Автор темы
Администратор
*****
Сообщений: 2271



Просмотр профиля
« : 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
Поэтому придумали конфигураторы Smiley
Которые "изучают" систему и в соответствии с полученными знаниями создают Makefile
но на конфигураторе они не остановились и придумали конфигураторы конфигураторов =)
на стом они остановились Smiley

Для сборки нам нужны компиляторы они прописаны в зависимостях пакета
build-essential так что достаточно установить его со всеми зависимостями.
Ещё нужны autoconf и все automake которые найдёте Smiley.

Итак чтобы собрать что то из исходниктов
нужно сначала "собрать" конфигуратор
как собрать конфигуратор описано в файле 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 .
ну или просто погуглить.

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

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

  •       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
« Последнее редактирование: 02 Апреля 2009, 17:25:50 от Kwah » Записан
bobrik
Гость
« Ответ #1 : 06 Апреля 2006, 14:50:47 »

Надо в тултипы ссылки на такие ветки повешать, авось заметст;)
А вообще доступно. Но большинство прог поставляется с configure в комплекте.
Записан
Denis Konstantinov
Автор темы
Администратор
*****
Сообщений: 2271



Просмотр профиля
« Ответ #2 : 06 Апреля 2006, 14:59:54 »

Надо в тултипы ссылки на такие ветки повешать, авось заметст;)
А вообще доступно. Но большинство прог поставляется с configure в комплекте.
У меня нет возможности туда это засунуть. Я думаю что кому нужно будет тот найдёт.
Я старался обьсснить общий процесс сборки, и он будет работать даже если есть конфигуратор в комплекте с исходниками.
Записан
rDi
Новичок
*
Сообщений: 26

338435114
Просмотр профиля
« Ответ #3 : 07 Апреля 2006, 12:14:13 »

Добрый день!
А как быть с процессом сборки deb пакетов?
Записан
dim4ik
Герой
*****
Сообщений: 772


Kubuntu / Archlinux


Просмотр профиля
« Ответ #4 : 07 Апреля 2006, 13:33:55 »

Добрый день!
А как быть с процессом сборки deb пакетов?

checkinstall
Записан
bobrik
Гость
« Ответ #5 : 07 Апреля 2006, 15:15:54 »

Сборку Дения тоже объяснил;)
См. поиск
Записан
Denis Konstantinov
Автор темы
Администратор
*****
Сообщений: 2271



Просмотр профиля
« Ответ #6 : 07 Апреля 2006, 17:46:43 »

Добрый день!
А как быть с процессом сборки deb пакетов?
См топик "Как собрать/пересобрать deb пакет"  http://forum.ubuntu.ru/index.php?topic=2159.0
Записан
itten
Участник
***
Сообщений: 187

itten@jabber.ru
Просмотр профиля
« Ответ #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 часа бьюсь Sad

руководство вообще туманное,, новечку ничего непонятно Smiley
Записан
bobrik
Гость
« Ответ #8 : 19 Июня 2006, 09:11:07 »

Скорее всего тут надо делать make -f Makefile.cvs, но покури ридми, проги могут по разному собираться...
Записан
Denis Konstantinov
Автор темы
Администратор
*****
Сообщений: 2271



Просмотр профиля
« Ответ #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 часа бьюсь Sad

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

http://packages.ubuntu.com/cgi-bin/search_contents.pl?word=autoheader&searchmode=searchfiles&case=insensitive&version=dapper&arch=i386
Записан
itten
Участник
***
Сообщений: 187

itten@jabber.ru
Просмотр профиля
« Ответ #10 : 19 Июня 2006, 14:23:53 »

Ничего невыходит Sad
Как с понял файлы 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
Автор темы
Администратор
*****
Сообщений: 2271



Просмотр профиля
« Ответ #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!
Ведь можешь когда хочешь!
Садись три!
Следующий раз слушай внимательно на уроках, и обязательно делай домашнее задание!
Записан
itten
Участник
***
Сообщений: 187

itten@jabber.ru
Просмотр профиля
« Ответ #12 : 19 Июня 2006, 16:40:11 »

так еще с самого начала делал... не катит.
кругом одни error, и в конце сообщения об ошибках.  Huh

Код:
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
Автор темы
Администратор
*****
Сообщений: 2271



Просмотр профиля
« Ответ #13 : 20 Июня 2006, 12:23:04 »

Ты помимо стого ещё что нибудь будешь компилить? Могу скомпиленные пакеты выслать, а так тебе нужно установить нужные dev пакеты. Например xlibs-dev возможно много чего ещё.
Записан
bobrik
Гость
« Ответ #14 : 26 Июня 2006, 23:09:35 »

Для любой Gnome-integrated программы Wink
Записан
Страниц: [1] 2 3 ... 28   Вверх
Печать
Русскоязычное сообщество Ubuntu Linux  |  Разработка  |  Сборка пакетов  |  Тема: Как компилить [уже в Wiki]
Перейти в:  


Get Firefox! Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Powered by MySQL Powered by PHP
Страница сгенерирована за 0.24 секунд. Запросов: 18.