Background
You might need to compile software depending on the language in which the program is written. Applications which require compiling are usually written in C and C++. If this is the case, you will need to install a compiler gcc which can be obtained by installing the build-essential package. Normally, you can do this by typing the following in a terminal:
and in order to run the configure and autogen.sh files that come with many programs:
Finally, you will need CheckInstall to safely insert your program in your system:
If the program is written in Java, you need a java run-time and compiler. You can install java by following the instructions on the Java page. Sometimes, a java based build tool ant is required. This package is available from the Ubuntu repositories.
If the program is written in an interpreted language like python or perl, you simply need the interpreter, which are installed by Ubuntu by default. You should be able to run the program directly, and in most cases you can install the additional python or perl programs required to run the package from the Ubuntu Repositories. Please see the note at the end of this article about interpreted languages.
Do you really need to compile?
If you are attempting to compile packages because you think the package is not available in the repository, please search for packages at the Ubuntu Package Search. Many authors also make their packages available as a Personal Package Archive (PPA), which can be added as an additional repository in your software sources. One place that many authors make their PPAs available is at Launchpad. You can also search by keyword for packages available to you from the command line (replace «<keyword>» with the actual term you are searching for of course!) by issuing following command:
Obtaining the Sources
Generally, the source packages will be available from the author’s website in an archived format. Common archive formats are tar.gz, tar.bz2 and zip. You can unarchive them using file-roller or by using the following commands:
Sometimes, you may also need to obtain cutting edge code using CVS. You will need to install the cvs utility by issuing a sudo apt-get install cvs. For example, to retrieve the NetworkManager sources, issue the following commands.
If you are installing from cvs, please see the note at the end of this article.
With many (though far from all) packages, it is possible to fetch current code from upstream using Bazaar (sudo apt-get install bzr) without having to look up the revision control location by hand. For example:
Three Stages to Compiling Packages
Most programs that need to be installed from source on Linux can be installed by using the ./configure; make; make install steps. The most difficult step is usually the ./configure step, after which the remaining steps should be easy to complete.
configure
- It checks that your computer fulfils all the necessary requirements to build the package
- It can help you change the default paths it looks for its requirements
- It is used to enable/disable various options in the compiled program
- It can change the path that the program will be installed in
You can look at the various options that your specific configure script provides you with by executing:
For example, by default the configure script installs to /usr/local. If you want to change the path, you would execute the configure script as shown below:
If you are really compiling from scratch, always read through the README and INSTALL files. You will see which pieces of software it needs, usually these are libraries and they usually have a different name in these files than in the packaging system. Then proceed to look for the package using apt-cache tool. Another trick to use if you are compiling a package already in the repositories is to install the build dependencies of the package using the command below:
This will ensure that you have all the dependencies of the package are installed, and hopefully the configure script will not complain about your system having old version of the dependencies installed, in which case you will have to compile the dependencies also.
Troubleshooting the configure
If no configure file exists at all, you might want to check for the existence of a configure.ac file (although you should, first of all, read the INSTALL and README files very carefully!). If configure.ac exists, chances are that the developer has forgot to create the final configure. To create it yourself, you need the autoconf package:
After it is installed, you can type
and, if you’re lucky, a working configure will be created.
Compiling the Package
Hopefully, the configure stage should have been completed by now and the actual compiling can begin. This can be done simply be calling:
Now if all goes well you should have a working copy of the program in the sources directory. You should try it out by running it:
If the program fails at this stage, this is probably a bug in the program. You should contact the author, and notify the author of the errors.
Installing the Package
If everything works well and you want to install the program just type:
This creates a .deb file using CheckInstall which makes removing the package at a later stage very easy.
However, if for some reason you do not want to use CheckInstall, this is the legacy way of installing (not recommended):
Notes
Interpreted Languages
- Perl modules are usually referenced as foo::bar (for example xml::parser). However, the package is called libfoo-bar-perl (libxml-parser-perl). Searching via apt-cache can help if this naming is a bit different, for example:
- Python modules are named python-module, so the python mysql module would be python-mysqldb. The mapping is less consistent here and apt-cache will help a lot. Doing a search like
-
usually helps in getting the required python module.
Comments
For a newbie, you may consider CompilingEasyHowTo more user-friendly.
- I was so prudent to change the page to reflect that. I hope everyone can agree.
- Is this guide for developers or users?
CompilingSoftware (последним исправлял пользователь philip-jackson 2014-08-19 16:26:23)
The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details
What does "./configure; make; make install" do?
What does ./configure do? Why make then make install ? How does it know where libs are? ( they are all there and loaded but it cant find them.) Why need libs if compiler is supposed to compile?
1 Answer 1
tells you whether are quite ready to build the application. It will check if you have everything needed to build the application, and, if it sees any critical errors it will inform you.
builds (compiles) the source code. Compiler compiles the code, but, most of the times, the code cannot stand alone, it requires external libraries (usually provided by ubuntu packages) to be installed. After this step the executable(s) of this specific application you are trying to install will be created.
Компиляция и установка пакетов из исходного кода с помощью Make
При работе с компьютером или сервером Linux большинство необходимых пакетов можно получить при помощи apt или другого менеджера пакетов. Но иногда нужен пакет или более современная версия программы, которых нет в репозиториях.
Данное руководство охватывает вопросы компиляции и установки cURL из исходного кода. Использованный здесь синтаксис применим на большинстве дистрибутивов.
Требования
Для компиляции исходного кода в Linux нужен пакет «build-essential» (в системах на основе Debian) или «Development Tools» (CentOS); данные пакеты содержат компиляторы и библиотеки gcc/g++.
Чтобы установить пакет на Debian и Ubuntu, используйте:
apt-get install build-essential
yum groupinstall «Development Tools»
Некоторые пакеты требуют для компилирования или запуска установки дополнительных зависимостей. Apt и другие менеджеры пакетов обычно устанавливают их. При компилировании пакетов самостоятельно нужно всегда проверять документацию, а также заранее устанавливать необходимые пакеты.
Перед компилированием cURL установите все необходимые зависимости. Также на используемом сервере нужно иметь привилегии root или sudo для установки и компилирования исходного кода.
Извлечение и компилирование исходного кода на VPS
Загрузка Tarball
Для начала нужно скачать исходный код cURL. Существует множество способов это сделать, но в данном руководстве используется tarball, доступный на сайте cURL. При желании URL в следующей команде можно заменить на URL текущей версии cURL, но при этом нужно помнить, что это должна быть ссылка на файл «tar.gz». Запустите:
Это скачает и сохранит исходный код как curl.tar.gz в текущем каталоге.
Теперь нужно извлечь tarball. Для этого запустите:
tar -xvzf curl.tar.gz
Исходный код будет расположен в папке по имени «curl-» с номером версии. При вводе:
будет выведен подобный результат:
/curl ls
curl-7.32.0 curl.tar.gz
В данном случае папка называется «curl-7.32.0», следовательно, чтобы войти в эту папку, нужно ввести:
Конфигурирование и компилирование исходного кода
В этой папке можно найти множество разных файлов. На данный момент нужно обратить внимание на файл «configure». Это скрипт, созданный для того, чтобы помочь запустить программу на различных компьютерах. Запустите:
Это автоматически использует переменные текущей системы, чтобы подготовить исходный код для данного VPS. В основном эта команда проверяет, соответствуют ли библиотеки, установленные в системе, тем, что нужны программе. Данное действие указывает компилятору, где искать библиотеки, нужные исходному коду, в данном случае cURL. Кроме того, данное действие определяет, куда впоследствии установить пакет. По завершению будет создан файл Makefile со всей нужной в нем информацией. Теперь все готово для компилирования исходного кода. Для этого запустите команду:
В результате этого действия будет выведено много лишней и непонятной информации на консоль. Подождите, пока это закончится. Это займет около минуты. По завершению нужно установить исходный код. Запустите как root:
Теперь make будет следовать инструкциям в «Makefile», чтобы установить скомпилированные пакеты. В большинстве случаев это все, что нужно для установки. Теперь можно ввести curl. Если cURL был установлен верно, будет выведен примерно такой результат:
curl: try ‘curl —help’ or ‘curl —manual’ for more information
При извещении об ошибке bash введите:
ln -s /usr/local/bin/curl /usr/bin/curl
Это создаст ссылку на /usr/bin/curl, которая соединяется с /usr/local/bin/curl. Это позволит запустить cURL, просто введя curl в консоль. Обычно это выполняется автоматически, но в некоторых случаях скрипт конфигурации не может найти нужное местоположение установки. Теперь можно ввести:
Это запустит текущую версию cURL. Выведенный результат имеет примерно такой вид:
/curl curl -V
curl 7.32.0 (x86_64-unknown-linux-gnu) libcurl/7.26.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.2 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: Debug GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
Готово! cURL был успешно скомпилирован и установлен из исходного кода.
Действия, описанные в данном руководстве, подходят для большинства дистрибутивов, следовательно, их можно выполнить для компилирования исходного кода других пакетов. Тем не менее, всегда нужно заранее знакомиться с документацией пакета. Она, как правило, содержит информацию о необходимых зависимостях, и даже иногда подсказывает, какие команды нужно использовать.
Запомните последовательность: ./configure, затем make, а затем make install.
Компиляция программ Linux
Все программы для компьютера представляют собой набор команд процессора, которые состоят из определенного набора бит. Этих команд несколько сотен и с помощью них выполняются все действия на вашем компьютере. Но писать программы непосредственно с помощью этих команд сложно. Поэтому были придуманы различные языки программирования, которые проще для восприятия человеку.
Для подготовки программы к выполнению, специальная программа собирает ее из исходного кода на языке программирования в машинный код — команды процессора. Этот процесс называется компиляция. Linux — это свободное программное обеспечение, а поэтому исходные коды программ доступны всем желающим. Если программы нет в репозитории или вы хотите сделать что-то нестандартное, то вы можете выполнить компиляцию программы.
В этой статье мы рассмотрим, как выполняется компиляция программ Linux, как происходит процесс компиляции, а также рассмотрим насколько гибко вы сможете все настроить.
Подготовка системы
Мы будем компилировать программы, написанные на Си или С++, так как это наиболее используемый язык для программ, которые требуют компиляции. Мы уже немного рассматривали эту тему в статье установка из tar.gz в Linux, но та статья ориентирована больше на новичков, которым нужно не столько разобраться, сколько получить готовую программу.
В этой же статье тема рассмотрена более детально. Как вы понимаете, для превращения исходного кода в команды процессора нужно специальное программное обеспечение. Мы будем использовать компилятор GCC. Для установки его и всех необходимых инструментов в Ubuntu выполните:
sudo apt install build-essential manpages-dev git automake autoconf

Затем вы можете проверить правильность установки и версию компилятора:

Но перед тем как переходить к самой компиляции программ рассмотрим более подробно составляющие этого процесса.
Как выполняется компиляция?
Компиляция программы Linux — это довольно сложный процесс. Все еще сложнее, потому что код программы содержится не в одном файле и даже не во всех файлах ее исходников. Каждая программа использует множество системных библиотек, которые содержат стандартные функции. К тому же один и тот же код должен работать в различных системах, содержащих различные версии библиотек.
На первом этапе, еще до того как начнется непосредственно компиляция, специальный инструмент должен проверить совместима ли ваша система с программой, а также есть ли все необходимые библиотеки. Если чего-либо нет, то будет выдана ошибка и вам придется устранить проблему.
Дальше идет синтаксический анализ и преобразование исходного кода в объектный код, без этого этапа можно было бы и обойтись, но это необходимо, чтобы компилятор мог выполнить различные оптимизации, сделать размер конечной программы меньше, а команды процессора эффективнее.
Затем все объектные файлы собираются в одну программу, связываются с системными библиотеками. После завершения этого этапа программу остается только установить в файловую систему и все. Вот такие основные фазы компиляции программы, а теперь перейдем ближе к практике.
Компиляция программ Linux
Первое что нам понадобиться — это исходники самой программы. В этом примере мы будем собирать самую последнюю версию vim. Это вполне нейтральная программа, достаточно простая и нужная всем, поэтому она отлично подойдет для примера.
Получение исходников
Первое что нам понадобиться, это исходные коды программы, которые можно взять на GitHub. Вы можете найти исходники для большинства программ Linux на GitHub. Кроме того, там же есть инструкции по сборке:

Давайте загрузим сами исходники нашей программы с помощью утилиты git:
git clone https://github.com/vim/vim

Также, можно было скачать архив на сайте, и затем распаковать его в нужную папку, но так будет удобнее. Утилита создаст папку с именем программы, нам нужно сделать ее рабочей:
Настройка configure
Дальше нам нужно запустить скрипт, который проверит нашу программу на совместимость с системой и настроит параметры компиляции. Он называется configure и поставляется разработчиками программы вместе с исходниками. Весь процесс компиляции описан в файле Makefile, его будет создавать эта утилита.
Если configure нет в папке с исходниками, вы можете попытаться выполнить такие скрипты чтобы его создать:
Также для создания этого скрипта можно воспользоваться утилитой automake:
aclocal autoheader automake —gnu —add-missing —copy —foreign autoconf -f -Wall
Утилита automake и другие из ее набора генерируют необходимые файлы на основе файла Mackefile.am. Этот файл обязательно есть в большинстве проектов.
После того как вы получили configure мы можем переходить к настройке. Одним из огромных плюсов ручной сборки программ есть то, что вы можете сами выбрать с какими опциями собирать программу, где она будет размещена и какие дополнительные возможности стоит включить. Все это настраивается с помощью configure. Полный набор опций можно посмотреть, выполнив:

Рассмотрим наиболее часто используемые, стандартные для всех программ опции:
- —prefix=PREFIX — папка для установки программы, вместо /, например, может быть /usr/local/, тогда все файлы будут распространены не по основной файловой системе, а в /usr/local;
- —bindir=DIR — папка для размещения исполняемых файлов, должна находится в PREFIX;
- —libdir=DIR — папка для размещения и поиска библиотек по умолчанию, тоже в PREFIX;
- —includedir=DIR — папка для размещения man страниц;
- —disable-возможность — отключить указанную возможность;
- —enable-возможность — включить возможность;
- —with-библиотека — подобно enable активирует указанную библиотеку или заголовочный файл;
- —without-библиотека — подобное disable отключает использование библиотеки.
Вы можете выполнить configure без опций, чтобы использовать значения по умолчанию, но также можете вручную указать нужные пути. В нашем случае ./configure есть, и мы можем его использовать:

Во время настройки утилита будет проверять, есть ли все необходимые библиотеки в системе, и если нет, вам придется их установить или отключить эту функцию, если это возможно. Например, может возникнуть такая ошибка: no terminal library found checking for tgetent(). configure: error: NOT FOUND!

В таком случае нам необходимо установить требуемую библиотеку. Например, программа предлагает ncurses, поэтому ставим:
sudo apt install libncurces-dev
Приставка lib всегда добавляется перед библиотеками, а -dev — означает, что нам нужна библиотека со всеми заголовочными файлами. После удовлетворения всех зависимостей настройка пройдет успешно.
Сборка программы
Когда настройка будет завершена и Makefile будет готов, вы сможете перейти непосредственно к сборке программы. На этом этапе выполняется непосредственно преобразование исходного кода в машинный. Утилита make на основе Makefile сделает все необходимые действия:

Дальше осталось установить саму программу, если вы использовали опцию prefix, чтобы не устанавливать программу в основную файловую систему, то можно применить стандартную опцию make:
После этого программа будет установлена в указанную вами папку, и вы сможете ее использовать. Но более правильный путь — создавать пакет для установки программы, это делается с помощью утилиты checkinstall, она позволяет создавать как deb, так и rpm пакеты, поэтому может использоваться не только в Ubuntu. Вместо make install выполните:
Затем просто установите получившийся пакет с помощью dpkg:
sudo dpkg install vim.deb
После этого сборка программы полностью завершена и установлена, так что вы можете переходить к полноценному использованию.
Если вы устанавливали программу с помощью make install, то удалить ее можно выполнив в той же папке обратную команду:
sudo make uninstall
Команда удалит все файлы, которые были скопированы в файловую систему.
Выводы
В этой статье мы рассмотрели, как выполняется компиляция программы Linux. Этот процесс может быть сложным для новичков, но в целом, все возможно, если потратить на решение задачи несколько часов. Если у вас остались вопросы, спрашивайте в комментариях!