<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF111%3ACompilation</id>
		<title>LXF111:Compilation - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF111%3ACompilation"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF111:Compilation&amp;action=history"/>
		<updated>2026-05-13T20:44:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF111:Compilation&amp;diff=9115&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF111:Compilation&amp;diff=9115&amp;oldid=prev"/>
				<updated>2009-11-25T07:40:26Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Сборка – это просто!==&lt;br /&gt;
&lt;br /&gt;
: Новая версия вашей любимой программы вышла без пакета для вашего дистрибутива. Что же делать? Да собрать ее из исходных текстов! '''Майк Сондерс''' расскажет все, что вам следует знать...&lt;br /&gt;
&lt;br /&gt;
{{Врезка | Содержание = [[Изображение: LXF111_44_1.jpg | 300px]] Пакет ''Audacity'' из репозитория Ubuntu: да, неплохо, но можно добавить пару эффектов, собрав его из исходных текстов. | Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Сборка приложения из исходников – это старая школа, верно? Кому охота бороться с командной строкой, отлавливать зависимости и упрашивать компилятор ''GCC'' работать как полагается? Глупо заниматься этим в мире двоичных пакетов и сетевых репозиториев. В Интернете доступны тысячи пакетов, и все аккуратно собраны для наших дистрибутивов, аннулируя необходимость возиться с ''Make''-файлами. Но это только кажется. При всем их удобстве, двоичные пакеты имеют множество ограничений, которые можно преодолеть, лишь собрав программу из исходных текстов. Вот некоторые преимущества ручной сборки:&lt;br /&gt;
* '''Злободневность''' Получайте программы сразу же после их публикации. КрутоеПриложение 2.1 уже вышло, а в вашем дистрибутиве все еще версия 2.0, и вам придется ждать следующего крупного релиза (если это только не самообновляющийся дистрибутив вроде Gentoo или Arch), чтобы обзавестись новинкой. Сборкой из исходных текстов вы сможете получить новейшую версию чего угодно сразу после выхода.&lt;br /&gt;
* '''Функции '''В интересах стабильности издатели дистрибутивов при создании пакетов часто отключают экспериментальные функции, предоставляя вам более бедную (хотя и надежную) часть приложения. А идя путем исходных текстов, мы включаем дополнительные примочки – имеем право!&lt;br /&gt;
* '''Оптимизация''' При сборке из исходных текстов вы получаете шанс сконфигурировать программу для вашей машины. Бинарные пакеты создаются для большого диапазона x86-процессоров. Используя определенные опции компилятора, вы можете создать специальное приложение именно для вашей модели процессора и извлечь дополнительную производительность из вашего ПК.&lt;br /&gt;
&lt;br /&gt;
Доказать это проще, чем кажется; давайте рассмотрим, как оно работает. Навыки, приобретенные вами при чтении этой статьи, дадут хорошую основу для Linux (и Unix) карьеры, поскольку таким способом собираются почти все программы. Мы возьмем стандартный, немодифицированный вариант Ubuntu 8.04 и установим в нем звуковой редактор ''Audacity'', включив при этом пару дополнительных опций. ''Audacity'' – хороший выбор, потому что в процессе его сборки могут возникать&lt;br /&gt;
некоторые странные ошибки, а значит, мы научимся справляться с любой неожиданностью.&lt;br /&gt;
&lt;br /&gt;
===Подготовка===&lt;br /&gt;
&lt;br /&gt;
{{Врезка | Заголовок=Зачем нужна сборка? | Содержание=Если вы никогда до этого не видели исходного кода, вас может сбить с толку используемая здесь терминология, так что давайте разберемся с терминами и процессами.&lt;br /&gt;
&lt;br /&gt;
''Сборка (компиляция)'' – это процесс       преобразования человеко-читаемого исходного кода (программы, записанной на одном из высокоуровневых языков программирования) в двоичные инструкции, используемые конкретным процессором данного компьютера. Для самых популярных языков программирования, ''C'' и ''C++'', тяжелую работу преобразования исходного текста в двоичный исполняемый файл («бинарник») выполняет Коллекция Компиляторов GNU (''GCC'' – GNU Compiler Collection): она читает исходные тексты и переводит содержащиеся в них инструкции ''C'' или ''C++'' в машинный код вашего процессора.&lt;br /&gt;
&lt;br /&gt;
''Различные семейства процессоров'' имеют разные типы команд; например, при компиляции исходного текста приложения для работы на процессоре Intel, полученная программа не будет работать на процессоре PowerPC. Вам потребуется пересобрать ее для каждого типа процессора, на котором она будет&lt;br /&gt;
использоваться.&lt;br /&gt;
&lt;br /&gt;
Отметим, что для интерпретируемых языков, вроде ''Python, Perl'' или ''Ruby'', каждая строка исходного текста выполняется на&lt;br /&gt;
лету. Для этих языков нет никакого процесса компиляции – интерпретатор проходит программу строку за строкой.| Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Прежде всего заполучим исходный текст ''Audacity''. Вы можете найти его на сайте проекта в http://audacity.sf.net, или на LXFDVD в разделе '''Звук'''. Сохраните '''audacity-src-1.2.6.tar.gz''' на рабочем столе, затем откройте окно командной строки ('''Приложения &amp;gt; Вспомогательные программы &amp;gt; Терминал''') и введите следующее:&lt;br /&gt;
&lt;br /&gt;
 cd Desktop&lt;br /&gt;
 tar xfvz audacity-src-1.2.6.tar.gz&lt;br /&gt;
 cd audacity-src-1.2.6&lt;br /&gt;
&lt;br /&gt;
Первая команда переносит нас в каталог '''Desktop''', а вторая извлекает сжатый архив '''.tar.gz'''. (Заметьте, что для архивов с суффиксом '''.tar.bz2''' вы должны использовать вместо нее ''tar xfvj''). Наконец, мы перемещаемся в свежесозданный каталог с исходными текстами.&lt;br /&gt;
&lt;br /&gt;
Введите ''ls'', чтобы увидеть список распакованных файлов архива. Наряду с различными скриптами (подсвеченными зеленым) и подкаталогами (синего цвета), вы увидите файл '''README.txt'''. Всегда стоит глянуть в файлы с именами '''README.txt''' или '''INSTALL.txt''', поскольку в них&lt;br /&gt;
может быть полезная информация насчет сборки программы. Введите ''less README.txt'', чтобы просмотреть файл, затем нажмите клавишу '''Q'''&lt;br /&gt;
для выхода. В данном случае, нам не нужно читать все: можно перейти прямо к процессу компиляции.&lt;br /&gt;
&lt;br /&gt;
{{Врезка |left| Содержание = [[Изображение: LXF111_45_1.jpg | 300px]] Это результат работы ''./configure --help'' – ''GCC'' показывает доступные нам опции настройки сборки. | Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Скрипт ''configure'' подготовит исходный текст ''Audacity'' к сборке. Введите команду&lt;br /&gt;
&lt;br /&gt;
 ./configure --help&lt;br /&gt;
&lt;br /&gt;
Она запустит скрипт настройки ('''./''' требуется, потому что сценарий находится в текущем каталоге) и выведет все доступные опции сборки.&lt;br /&gt;
Прокрутив терминал, вы увидите, что нам доступен огромный диапазон параметров. Но не дрожите – вполне можно принять значения по&lt;br /&gt;
умолчанию. Хотя мы и собираемся сделать кое-какие мелкие изменения – во-первых, включим библиотеку ''SoundTouch'': она предоставляет&lt;br /&gt;
дополнительные инструменты манипуляции темпом и тоном, не вошедшие в стандартный пакет Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Далее, можно изменить место установки программы после сборки. Для этого используем со скриптом настройки опцию '''--prefix'''. Например,&lt;br /&gt;
чтобы установить ''Audacity'' в каталог '''/usr/local''' (отдельно от других программ – так проще для поддержки), введите '''--prefix=/usr/local'''.&lt;br /&gt;
&lt;br /&gt;
Как указывалось ранее, другим крупным преимуществом сборки программ из исходных текстов является выбор оптимизации. Установив переменные среды '''CFLAGS''' (для кода ''C'') и '''CXXFLAGS''' (для ''C++'') перед запуском скрипта ''configure'', можно выбрать точные опции оптимизации компилятора ''GCC'', которые мы хотим использовать. Это сложный предмет, но дополнительное увеличение скорости получить очень легко. Взгляните на эти команды:&lt;br /&gt;
&lt;br /&gt;
  export CFLAGS=”-O3 -march=core2”&lt;br /&gt;
  export CXXFLAGS=”-O3 -march=core2”&lt;br /&gt;
&lt;br /&gt;
Так мы устанавливаем вышеупомянутые переменные среды с оптимизацией, соответствующей архитектуре Intel Core 2. Часть '''-O3''' начинается с буквы '''О''', а не с нуля, и устанавливает третий уровень оптимизации. (Большинство дистрибутивов собирают свои пакеты с '''-O2''' для упрощения отладки и небольшого уменьшения размера исполняемого файла). Если у вас машина с чипом AMD64, то используйте '''-march=athlon64''', а если вы не уверены, то используйте просто '''-march=i686''' для более широкой совместимости. За полным списком поддерживаемых процессоров можете обратиться к man-страницам ''GCC'' (''man gcc''), но читать их нелегко!&lt;br /&gt;
&lt;br /&gt;
Итак, мы настроили оптимизацию, и готовы к запуску скрипта ''configure''. Вперед:&lt;br /&gt;
&lt;br /&gt;
 ./configure --prefix=/usr/local --with-soundtouch=system&lt;br /&gt;
&lt;br /&gt;
Тем самым мы велим скрипту произвести установку в каталог '''/usr/local''' и включить опцию ''SoundTouch'', которая присутствовала&lt;br /&gt;
в выводе ''./configure --help'', виденном нами ранее. (Часть ‘'''system'''’ опции ''SoundTouch'' говорит о том, что мы хотим использовать версию&lt;br /&gt;
''SoundTouch'', доступную в дистрибутиве, поскольку поставляемая с ''Audacity'' содержит ошибки.)&lt;br /&gt;
&lt;br /&gt;
===Ловим зависимости===&lt;br /&gt;
&lt;br /&gt;
Ой, что-то не так. После запуска команды ''./configure'' выскочила следующая ошибка: '''‘C compiler cannot create executables’''' [компилятор C не может создавать исполняемые файлы]. Для сборки двоичных файлов из исходных текстов необходимо установить инструментарий разработчика, так что введите:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
В Ubuntu это приведет к установке мета-пакета, включающего все инструменты, необходимые для сборки стандартных программ командной строки. Если у вас другой дистрибутив, поищите '''GCC, G++''' и '''Binutils''' в своем менеджере пакетов и немедленно установите их, затем повторно выполните скрипт настрой-&lt;br /&gt;
ки. (Для новичков в командной строке подскажем экономящий время способ: нажмите клавишу «стрелка вверх», и ранее введенные команды вернутся).&lt;br /&gt;
&lt;br /&gt;
Теперь скрипт проработает дольше, но споткнется и сообщит, что не смог найти в системе программу с именем ''wx-config''. Для отрисовки интерфейса ''Audacity'' использует графический инструментарий под названием ''wxWidgets'', а мы его еще не установили; потому и возникла ошибка. Итак, нужно&lt;br /&gt;
извлечь ''wxWidgets'' из менеджера пакетов ''Synaptic''.&lt;br /&gt;
&lt;br /&gt;
Однако прежде чем браться за мышь, важно учесть, что многие программы Linux, особенно библиотеки и инструментарии, от которых зависят другие программы, поставляются в двух версиях. Одна из них – это библиотека времени выполнения, к которой могут подключаться программы, другая – набор библиотек разработчика и заголовочных файлов, используемых для сборки приложений. Итак, откройте ''Synaptic'' (в меню '''Система &amp;gt; Администрирование''') и поищите ''wxWidgets''.&lt;br /&gt;
&lt;br /&gt;
Прокрутите появившийся список, и вы увидите ''libwxgtk2.6-0''. Это библиотека времени выполнения, от которой зависят программы, использующие ''wxWidgets'' – она предоставляет реализацию вызовов  ''wxWidgets'' средствами ''GTK+''. Проверьте, установлена ли она, а также наличие '''libwxgtk2.6-dev''' (здесь содержатся необходимые файлы разработчика для сборки наших исходных текстов), затем примените изменения. (В других дистрибутивах эти пакеты будут иметь сходные имена, так что ищите ''wxWidgets'' или ''wxgtk''. У пакетов разработчика имена почти всегда заканчиваются на '''-dev''' или '''-devel'''.)&lt;br /&gt;
&lt;br /&gt;
Теперь      перезапустите скрипт настройки. Вы увидите, что ''Audacity'' требует более старую версию ''wxWidgets'', а именно '''2.4.x'''! Это практически стандартная ситуация при сборке из исходных текстов, вот почему мы все это здесь и показываем; часто необходим метод проб и ошибок, чтобы точно выяснить, какие именно библиотеки и какие версии необходимы – и иногда это может утомлять. Итак, возвращаемся обратно в ''Synaptic'', удаляем ''wxWidgets 2.6'', и устанавливаем версию '''2.4''' (не забудьте пакет '''-dev''').&lt;br /&gt;
&lt;br /&gt;
====Магия ''Checkinstall''====&lt;br /&gt;
&lt;br /&gt;
Если у вас несколько ПК или вы являетесь администратором большого парка корпоративных машин, то у вас, вероятно, нет времени для выполнения всех&lt;br /&gt;
шагов сборки на каждом компьютере. К счастью, для этого есть инструмент, позволяющий создавать двоичные пакеты программ, собранных из исходных&lt;br /&gt;
текстов. ''Checkinstall'', который можно загрузить с http://tinyurl.com/2uodas (или взять в разделе '''Главное'''  диска-приложения LXFDVD), создает пакеты '''Deb, RPM''' и '''.tgz''' для Slackware.&lt;br /&gt;
&lt;br /&gt;
Установив ''Checkinstall'', запустите скрипт ''./configure'' для приложения, которое вы хотите собрать, как было описано в тексте. Затем выполните make для&lt;br /&gt;
выполнения сборки приложения, но не запускайте после этого обычное ''make install'': вместо него, от имени root выполните ''checkinstall''.&lt;br /&gt;
&lt;br /&gt;
Тут вам будет задано несколько вопросов, например, про тип создаваемого пакета или хотите вы включить в него документацию или нет. По завершении работы ''Checkinstall'' вы получите двоичный пакет, который сможете установить на любом необходимом числе машин (если, конечно, на них тот же дистрибутив и установлены те же библиотеки).&lt;br /&gt;
&lt;br /&gt;
===Собираем код===&lt;br /&gt;
&lt;br /&gt;
Запустите скрипт ''configure'' еще раз, и вы увидите, что теперь все пройдет гладко. Для других программ может понадобиться обработать больше зависимостей, прежде чем удастся выполнить сборку – как уже говорилось, это всегда процесс проб и ошибок. Например, если ''configure''-скрипт программы жалуется, что не может найти библиотеки разработки '''PNG''', посмотрите пакет с именем вроде ''libpng-dev''. Если вы собираете приложение, основанное на ''Qt'', потребуется ''libqt-dev''. Часто в файле '''README''' приводится полный список.&lt;br /&gt;
&lt;br /&gt;
Команда, которую следует подать компилятору ''GCC'' – это (барабанная дробь)…&lt;br /&gt;
&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
Вот так все просто. Утилита make обращается к только что созданному файлу '''Makefile''', разъясняющему порядок сборки исходного кода&lt;br /&gt;
программы. В зависимости от ее размера – и скорости вашей машины – процесс сборки может занять где-то от 10 секунд (для небольших&lt;br /&gt;
приложений командной строки) до нескольких часов (для таких левиафанов, как ''OpenOffice.org'').&lt;br /&gt;
&lt;br /&gt;
На этапе сборки вы заметите, что ''GCC'' вызывается с использованием настроек '''CFLAGS''' и '''CXXFLAGS''', определенных нами ранее. Вы&lt;br /&gt;
также можете увидеть предупреждения (warnings) о «нестрогом» коде, но о них беспокоиться нечего. Однако вы можете прийти в шок, когда процесс сборки вдруг остановится с ошибкой. Вы увидите, что '''SoundTouchEffect.o''' не может быть собран – означает ли это, что&lt;br /&gt;
''SoundTouch'' отсутствует?&lt;br /&gt;
&lt;br /&gt;
Ну да, скрипт ''configure'' должен был бы предупредить нас об этом. Но не все в нашем мире совершенно – придется исправить проблему лично. Припомните, как мы в начале указали опцию '''--with-soundtouch=system''' для скрипта ''configure'', вместо '''=local''', потому что&lt;br /&gt;
версия, поставляемая с ''Audacity'', повреждена. (Вы и сами могли убедиться в том, что '''=local''' не работает, но мы малость сэкономили вам&lt;br /&gt;
время!)&lt;br /&gt;
&lt;br /&gt;
Итак, ''configure'' здесь нас немного подвел. Но дело за малым: откройте ''Synaptic'' и найдите и установите ''libSoundTouch'' (вместе с коллегой '''-dev'''). Скрипт настройки перезапускать не нужно – он завершился удачно, так что вновь введите make и следите за выводом. Теперь вы&lt;br /&gt;
увидите, что не был найден '''FLAC'''. Ох! Запустите ''Synaptic'' и установите пакет библиотеки ''libflac-dev''.&lt;br /&gt;
&lt;br /&gt;
Введите ‘''make''’ еще раз, и вы увидите, что процесс сборки пошел дальше, но затем вновь остановился с целой серией ошибок, включая&lt;br /&gt;
такую:&lt;br /&gt;
&lt;br /&gt;
  undefined reference to ‘soundtouch::SoundTouch::SoundTouch()’&lt;br /&gt;
&lt;br /&gt;
Похоже, компилятор до сих пор не может найти ''SoundTouch'', даже несмотря на то, что мы установили ее и на стадии ''configure'' предупреждений не было. Дожили! На последней стадии сборки, когда все файлы программы объединяются (компонуются или «линкуются») в исполняемый файл, ''GCC'' не понимает, где находится ''SoundTouch''.&lt;br /&gt;
&lt;br /&gt;
Необходимо изменить ''Make''-файл, который управляет процессом сборки. Введите&lt;br /&gt;
&lt;br /&gt;
  gedit src/Makefile&lt;br /&gt;
&lt;br /&gt;
Прокрутите до строки '''31''', где стоит ‘'''LIBS'''’ – это библиотеки, с кото рыми должен быть объединен (слинкован) ''Audacity''. Добавьте в конец&lt;br /&gt;
строки '''-libsoundtouch''' (регистр букв важен), сохраните файл и выйдите из редактора. Запустите ''make'' вновь. Вы увидите, что основной двоич ный файл ''Audacity'' был собран корректно, но процесс уперся в новую стену: не нашлась утилита ''msgfmt'' для управления документацией.&lt;br /&gt;
&lt;br /&gt;
На сей раз не обойтись без поиска в Google. Ищите ‘'''msgfmt'''’ и ‘'''Ubuntu'''’ (оба термина – в одном сеансе поиска, но не в кавычках,&lt;br /&gt;
поскольку это не фраза); вы увидите, что другие пользователи наткнулись на те же проблемы при сборке программ. Пропажа, оказывается,&lt;br /&gt;
сидит в пакете ''gettext'', но – как это нудно! – у команды Ubuntu есть пакет ''gettext'' и пакет ''gettext-base''. Последний был установлен как часть&lt;br /&gt;
набора ''build-essential'', тогда как важный для нас инструмент ''msgfmt'' содержится в первом. Может быть, когда-нибудь разработчики дистрибутива перестанут разбивать программы на триллионы двусмысленно названных пакетов; но хорошо уже и то, что решение быстро нашлось в Google.&lt;br /&gt;
&lt;br /&gt;
Итак, установите ''gettext'', чтобы получить ''msgfmt'', и запустите ''make'' вновь. Как говорит Борат, большой успех! Вы вернетесь в командную строку без ошибок. Осталось только установить вновь собранный ''Audacity'' в файловой системе, так что введите:&lt;br /&gt;
&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Это действие надо выполнить от имени пользователя root (администратора), потому и ''sudo''. В не-Ubuntu дистрибутивах может потребоваться переключиться в режим root командой ''su'', а затем ввести ''make install''. И вы сможете запустить программу:&lt;br /&gt;
&lt;br /&gt;
{{Врезка | Содержание = [[Изображение: LXF111_47_1.jpg | 300px]] Ура! ''Audacity'' пересобран. Пусть интерфейс у него и на ''GTK 1'', зато теперь у нас есть два классных новых эффекта. | Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/bin/audacity&lt;br /&gt;
&lt;br /&gt;
Если надо удалить программу, выполните ''sudo make uninstall''. Вы можете также удалить каталог с исходными текстами, когда захотите –&lt;br /&gt;
откомпилированная версия теперь хранится в '''/usr/local/'''.&lt;br /&gt;
&lt;br /&gt;
===Шрифты – не фонтан===&lt;br /&gt;
&lt;br /&gt;
Вы можете отметить, что в этой версии ''Audacity'' шрифты выглядят не очень-то красиво. Это потому, что версия ''wxWidgets 2.4'', включенная в Ubuntu, была собрана с ''GTK1'', где нет сглаживания шрифтов. Пересборка ''wxWidgets 2.4'' с ''GTK 2'' – это еще одно упражнение, которое&lt;br /&gt;
вы можете выполнить по завершении нашего урока! В любом случае, загрузите какой-нибудь звуковой файл и щелкните на меню '''Эффекты'''.&lt;br /&gt;
Вы увидите две новые опции, которые не были доступны в базовой версии Ubuntu: Изменить тон и Изменить темп.&lt;br /&gt;
&lt;br /&gt;
Благодаря чудодейственной мощи сборки мы на шаг опередили Ubuntu. Что, Шаттлворт, съели? Поскольку добавление поддержки ''SoundTouch'' ради двух наших дополнительных функций – дело хлопотное, неудивительно, что команда Ubuntu на него плюнула. Сборка большинства программ, за которые вы возьметесь, пройдет гладко или потребует лишь несколько очевидных зависимостей, но мы навидались всяческих вариантов возможных проблем, так что теперь вы обучены и&lt;br /&gt;
готовы к любым неожиданностям. Теперь пора за сборку! '''LXF'''&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>