Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Статьи об операционной системе Linux

Сайдбар

Как самостоятельно компилировать программы

29 янв. 2014

Существует как минимум две причины, по которым вам, возможно, придется компилировать программы для Linux самостоятельно: либо вы не найдете для вашего дистрибутива двоичного пакета с готовой скомпилированной нужной программой, либо вам может понадобиться скомпилировать программу с конфигурацией, отличающейся от стандартной.

Условия


Прежде чем приступить к делу, потребуется выполнить несколько предварительных условий.

— Установить набор компиляторов проекта GNU (gcc и gcc-c++). В них содержатся компиляторы для С и С++. О Инсталлировать вспомогательные инструменты, в частности make, automake, autoconf и т. д. Эти программы нужны для конфигурации и выполнения компилирования.

— Установить версии различных библиотек, предназначенных для разработки. Названия соответствующих пакетов обычно заканчиваются на -devel (Red Hat, SUSE) или -dev (Debian, Ubuntu). Например, в glibc-devel или libc6-dev содержатся инструментальные файлы для базовой библиотеки glibc. Понадобятся ли вам еще какие-нибудь инструментальные пакеты, зависит от конкретной программы, которую вы хотите скомпилировать. Если компилятор или компоновщик будет выдавать сообщения об ошибках, гласящие, что для работы не хватает библиотек, это однозначно указывает на то, что вы пропустили какой-то важный инструментальный пакет.

Debian, Ubuntu


Метапакет определяет взаимозависимости между важнейшими инструментальными пакетами. Поэтому при установке build-essential автоматически инсталлируются многие другие пакеты, которые вместе образуют базовую конфигурацию для разработки программ на C/C++.

Fedora


Для выполнения основных предварительных условий лучше всего выполнить команду yum groupinstall development-tools. Чтобы разрабатывать программы для KDE и Gnome, также существуют специальные группы пакетов: kde-software-development и gnome-software-development.

SUSE


Здесь в модуле YaST устанавливаются все пакеты схемы «Базовая среда разработки». Если вы собираетесь писать программы для KDE или Gnome, установите подборки KDE- или GNOME-DEVELOPMENT. Если предпочитаете zypper, выпол-нитекоманду zypper install -t шаблон devel_basis или devel_kde bzw. devel_gnome.

Распаковка кода



Исходный код обычно лежит в Интернете в виде TAR-архивов (расширение *.tar. gz, *.tgz или *.tar.bz2). После того как скачаете код, распакуйте его в локальный каталог:

user$ tar xzf имя-tar.gz (Для .gz или .tgz)


user$ tar xjf имя.tar.bz2 (Для ,bz2) user$ cd имя


Пакеты SRMP



Кроме TAR-архивов существуют и другие пакеты, содержащие именно тот исходный код, из которого была скомпилирована определенная программа вашего дистрибутива. Такие пакеты с исходным кодом, как правило, находятся на FTP-серверах вашего дистрибутива. Файлы с исходным кодом для тех дистрибутивов, что работают на основе RPM-пакетов, находятся в пакетах SRMP с расширением *.src.rpm. Для установки выполните, как обычно, rpm -i:

root# rpm -i w/w?.src.rpm


Фактическое место расположения этого кода зависит от конкретного дистрибутива: в Fedora и Red Hat — это /usr/src/redhat/, а в SUSE — это /usr/src/ packages/.

— SOURCES/ww.tar.xxx содержит сам исходный код. Распаковка TAR-архива производится так, как это описано выше.
— SOURCES/имя-ххх.patch (Red Hat) или SOURCES/имя.dif (SUSE) содержит дистрибутивно-специфичные изменения исходного кода. Если вы хотите соответствующим образом изменить (пропатчить) файлы кода, выполните следующую команду:

user$ cd имя-исходный_каталог user$ patch < w/w.dif/patch

В зависимости от того, какой каталог в данный момент текущий и какая информация о каталоге записана в патч-файле, нужно дополнительно указать параметр -p1 (см. справку man patch). О SPECS/имя .spec содержит описание пакета, также служащее для создания RPM-пакетов. (Если вы хотите сделать RPM-пакет из самостоятельно скомпилированной программы, используйте для этого команду rpmbuild, на которой мы более подробно останавливаться не будем. Прочтите man rpmbuild!)

Пакеты с исходным кодом для Debian


В дистрибутивах, построенных на основе Debian, исходный код находится в нескольких файлах, которые нужно установить в текущий каталог, лучше всего с по-мощьюкоманды apt-get source.

user$ apg-get исходное имяпакета


Теперь в текущем каталоге вы найдете три новых файла и один каталог: О имя_пакета .dsc содержит краткое описание пакета;

— имя_пакета.orig.tar.gz содержит TAR-архив с первоначальным исходным кодом, написанным разработчиком программы;
— имя_пакета .diff.gz включает в себя все изменения оригинального исходного
кода, характерные для Debian или Ubuntu;
— новый каталог имя_пакета/ содержит, наконец, информацию, уже извлеченную из имя_пакета .diff.gz, причем все изменения из DIFF-файла уже выполнены.

Компилирование программы


Для компилирования и установки программ нужны три команды, которые иногда называются «три в одном»: ./configure, make и make install (далее они будут описаны более подробно). При этом должен быть открыт каталог с исходным кодом.

Сценарий configure


Это сценарий, который проверяет, доступны ли все необходимые программы и библиотеки. Поскольку сценарий находится в локальной папке, его нужно выполнять в виде./configure. Этот сценарий адаптирует файл Makefile, содержащий все команды, для компилирования и компоновки различных файлов кода. В некоторых (обычно небольших) программах configure может отсутствовать. В таком случае сразу выполняйте make.user$ ./configure

Команда make
Она инициирует обработку команд компилирования и компоновки. Теперь вы увидите (иногда практически бесконечные) уведомления и предупреждения о различных процессах компилирования, переполняющие окно консоли. Если не происходит ошибок, можете просто игнорировать эти сообщения. В результате в каталоге с исходным кодом должен появиться исполняемый файл имя.

user$ make


Во многих случаях на этом этапе уже можно запускать программу (команда ./ имя) и тестировать ее. Однако обратите внимание, что некоторые службы, в частности сетевые, требуют специальной конфигурации и обычно должны запускаться с помощью сценариев Init-V!

Команда make install


На заключительном этапе мы должны обеспечить всем пользователям доступ к программе. Нам потребуется скопировать файлы программы и, возможно, файлы библиотек, в общедоступные каталоги. Для этого необхо-димыправаадминистратора. Передвыполнением make install следуетубедиться, что нужная программа еще не установлена! В ином случае ее предварительно потребуется деинсталлировать. root# make install

Возможные проблемы


При компилировании программ могут возникать разнообразные проблемы. Чаще всего они связаны с отсутствием каких-либо вспомогательных компилирующих инструментов или библиотек. Как правило, такие проблемы идентифицирует уже configure, и устранить их совсем не сложно — нужно просто установить недостающий пакет.

Ситуация осложняется, когда configure требует библиотеку, которая недоступна в вашем дистрибутиве, либо у вас нет необходимой версии этой библиотеки. Тогда вам придется искать в Интернете нужную библиотеку или, возможно, сначала скомпилировать библиотеку. Что касается сложных программ, например Apache или mplayer, в Интернете имеются точные руководства по компилированию, где пошагово описано, что и в какой последовательности необходимо установить и скомпилировать.

Еще хуже, если в процессе компилирования возникает синтаксическая ошибка и процесс компилирования обрывается сообщением об ошибке. Часто причиной этому служит не программная ошибка, а несовместимость вашего компилятора и кода. Некоторые программы можно скомпилировать только определенной версией gcc (часто не новейшей!), то есть проблема решается установкой нужной версии компилятора. На этот случай в Интернете или в файлах README, сопровождающих исходный код, часто можно найти точные указания.

Управление пакетами


Самостоятельно скомпилированные программы и библиотеки вносят путаницу в управление пакетами. Проблема заключается в том, что хотя программа аЪс, скомпилированная вами, уже установлена в системе, база данных RPM или DEB ничего об этом «не знает». Если теперь вы попытаетесь установить пакет xyz, зависящий от аЪс, то получите сообщение об ошибке, так как, по мнению системы, не выполняются межпакетные взаимозависимости. Однако установить пакет с помощью rpm можно благодаря параметрам nodeps и -force.

Самое красивое решение — не устанавливать программу с помощью make install, а сначала подготовить и установить пакет. Для этого вам нужно познакомиться с командами, отвечающими за упаковку пакетов. В целом этот метод очень неудобный, в особенности если программа должна не один раз тестироваться и компилироваться заново.


Читайте так же:

Java

Никакого спама, только обновления!!!

Комментарии (0)


    Услуги по MODX Revolution

    Посмотреть все услуги

    Техническая оптимизация сайта

    Подробнее & Заказать

    Создание сайта на MODX Revolution

    Подробнее & Заказать

    Перенос сайта на MODX Revolution

    Подробнее & Заказать

    Продвижение сайта на MODX

    Подробнее & Заказать