Компиляция программ из исходного кода

Теперь, когда Darwin в Leopard, помимо собственной мощи и гибкости, предоставляет доступ к большинству проектов Open Source с помощью MacPorts или Fink, пользователям редко приходится самостоятельно компилировать программы из исходного кода. Вам, скорее всего, потребуется заниматься этим только в случае, если вы сами занимаетесь разработкой ПО. Однако, если вы новичок в программировании и действительно очень хотите попробовать поработать с какой-нибудь новейшей программой, которую невозможно найти ни через Fink, ни через MacPorts, или если вам требуется скомпилировать приложение с индивидуальными опциями, то вам, вероятно, все же придется заниматься самостоятельной компиляцией приложений из исходного кода.
Внимание
Компиляция программ из исходного кода - это непростая задача. Часто вы будете сталкиваться с проблемами, когда полученные приложения работают не так, как ожидается. Вам придется затратить немало времени и усилий на исследование проблем и поисков их решений, чтобы добиться получения программ, корректно работающих именно на вашем компьютере. В некоторых случаях что-то вообще откажется работать. Если вы легко впадаете в отчаяние, то самостоятельная компиляция программ точно не для вас.
Компиляция приложений из исходного кода обычно представляет собой трехэтапную процедуру, состоящую из конфигурирования, сборки и установки. Как правило, все эти шаги довольно хорошо автоматиризованы и, за исключением этапа конфигурирования, не слишком сильно меняются от программы к программе.
Примечание
По правде говоря, процесс компиляции приложений из исходного кода часто включает и четвертый этап - выяснение причин, по которым первые три завершились неудачей. Этот вопрос мы тоже не обойдем вниманием.
Прежде чем приступать к выполнению любого из перечисленных шагов, вам в первую очередь необходимо раздобыть исходный код. Как правило, найти его можно на официальном web-сайте проекта или в хранилище исходных кодов наподобие SourceForge flittp:www.sourceforge.net.
Шаг 1: конфигурирование
Для тех, кто компилирует приложения в соответствии с личными потребностям и для личного использования, этап конфигурирования представляет собой самую важную часть процесса сборки. Именно на данном этапе приложение можно настроить и сконфигурировать для работы на вашем компьютере. В первую очередь необходимо посмотреть, а какие же конфигурационные опции вообще доступны. Это можно сделать, перейдя в основную папку с исходным кодом и введя следующую команду:./configure - help. В результате вы получите полный список всех доступных конфигурационных опций. Большинство из этих опций либо имеют вполне разумные значения по умолчанию, либо автоматически устанавливаются на стадии конфигурирования. Основное ваше внимание должны привлечь всевозможные необязательные функциональные возможности, которые могут оказаться для вас полезными.
Примечание
Некоторым программам для корректной компиляции требуется, чтобы в вашей системе имелись специфические библиотеки или были установлены конкретные программы. Это особенно справедливо в случаях, когда вам требуется встроить в индивидуально компилируемую программу специфические дополнительные функции. Эти библиотеки и приложения называются зависимостями. MacPorts и Fink обычно автоматически разрешают проблемы с зависимостями, если, конечно, вы пользуетесь одной из этих систем при установке приложений. Однако при ручной компиляции вам придется решать эти проблемы самостоятельно.
Если никакие из дополнительных опций вам не нужны, то сконфигурировать сборку можно, дав команду. /configure.
Если же какие-либо из необязательных опций вас заинтересовали и вы хотите включить их в индивидуальную сборку, то команда конфигурирования должна будет выглядеть примерно так, как показано в листинге 19.22.
Листинг 19.22. Синтаксис команды конфигурирования сборки, используемый для включения необязательных опций ./configure - vith - optionl - with - opticm2 - enable - feature - x.
В любом случае, после нажатия клавиши, запустится конфигурационный скрипт, результатом работы которого является создание файла сборки, который будет содержать инструкции, руководящие дальнейшим процессом сборки и установки. Для сложных программ на завершение работы конфигурационного скрипта может потребоваться несколько минут или даже более длительное время. В ходе работы конфигурационного скрипта на экран будет выводиться большой объем текстовой информации, главным образом предназначенной для того, чтобы информировать вас о происходящих событиях. После успешного завершения скрипт обычно выводит сообщение, информирующее вас об успешном завершении процесса конфигурирования и, возможно, дающее дополнительные инструкции по дальнейшей сборке. Если что-то пойдет не так, то выводимый текст может сообщать о действиях, которые вам следует предпринять для решения проблемы, но может и не содержать никакой дополнительной информации.
Примечание
Если в ходе работы конфигурационного скрипта происходит ошибка, то возникшая проблема не всегда имеет простое решение. При просмотре информации, выводимой конфигурационным скриптом, вы можете выяснить, что проблема вызвана, например, отсутствующей библиотекой или что скрипт не может выяснить, как выполнять конфигурирование для вашей системы. Проблемы с отсутствующими библиотеками решаются относительно просто, так как такие библиотеки почти всегда можно найти и установить. В некоторых случаях необходимые библиотеки уже присутствуют в системе, а проблема в действительности вызвана тем, что конфигурационный скрипт просто не может их обнаружить. В этом случае при запуске конфигурационного скрипта следует указать путь к нужной библиотеке. В некоторых случаях возникают специфические проблемы, пути решения которых следует искать на форумах поддержки. Печально, но факт - в некоторых случаях программа просто откажется работать в вашей системе, несмотря ни на какие ухищрения.
Шаг 2: сборка
Если этап конфигурирования прошел успешно, то на следующем шаге необходимо приступить к сборке приложения. Для этого следует дать команду make. Да-да, это действительно настолько просто. Теперь, пока происходит компиляция вашей программы, можете сделать небольшой перерыв и, например, пойти выпить чашечку кофе. Надо сказать, что в наше время компиляция программы может занять от нескольких секунд до нескольких часов. В общем случае, для умеренно сложных приложений, этот процесс требует от 5 минут до получаса, в зависимости от вычислительных ресурсов вашего компьютера.
Если у вас новый компьютер Мае на базе процессора Intel, вы можете существенно ускорить процесс компиляции и сборки. Поскольку даже самые слабые компьютеры из семейства iMac на базе Intel имеют, как минимум, двухъядерные процессоры, то для задействования обоих ядер следует добавить к команде make опцию - j 2. Соответственно, если у вас четырехъядерный процессор, вы сможете применить команду make - j 4 и т. д.
Примечание
Здесь, как и на предыдущем шаге, время от времени могут возникать проблемы. К сожалению, ошибки, возникающие во время процесса сборки, обычно гораздо сложнее, чем ошибки на стадии конфигурирования. Если вы увидите, что процесс сборки останавливается на конкретной функции, которую вы активизируете с помощью конфигурационной опции, попробуйте повторить процессы конфигурирования и сборки, не активизируя эту конкретную опцию. Если вы действительно не используете никаких необычных опций, а компилировать пытаетесь достаточно популярную программу, то возможно, что не только вы столкнулись с данной проблемой. Попробуйте поискать ее решение на форумах поддержки, вполне может быть, что кто-то уже нашел решение.
Шаг 3: установка
Обычно, если вы имеете дело со стабильной версией популярного приложения, все этапы проходят благополучно, и вы без проблем осуществите шаги по конфигурированию и сборке приложения. После этого вам останется лишь установить готовую программу. Обычно этот процесс тоже не представляет сложностей и осуществляется командой sudo make install.
Большинство программ, скомпилированных таким образом, устанавливаются в каталоге /usr/local/. По умолчанию этого каталога в Leopard не существует, поэтому вполне возможно, вы захотите его создать. Однако если вы хотите установить программы или их фрагменты в другом каталоге, то обычно вы можете задать его на этапе конфигурирования как одну из конфигурационных опций.
Подводя итоги, скажем, что для осуществления ручной сборки программ, вам следует сначала загрузить исходный код программы, а затем, в простейшем случае, выполнить следующие шаги: конфигурирование, сборку и установку.
Заключение
В этой главе рассмотрено множество важных вопросов, начиная с написания командных сценариев и заканчивая компиляцией приложений из исходного кода. При написании данной главы не ставилась цель сделать вас экспертом во всех этих вопросах. Напротив, основная задача этой главы заключалась в том, чтобы помочь вам ознакомиться с мощными возможностями, привнесенными Darwin в мир Мае. Наиболее важное значение имеют разделы данной главы, посвященные MacPorts и Fink, поэтому вам настоятельно рекомендуется выбрать и установить одну из этих систем.