Linux, как собрать программу из исходного кода

Обновлено: 21.11.2024

Компьютерная программа — это список инструкций, данных компьютеру для выполнения определенной задачи или ряда задач. Компьютеры не понимают английский язык (мы все хотели бы, чтобы они понимали!), поэтому программисты должны передавать эти инструкции компьютеру на языке, который компьютер понимает. Однако компьютеры могут работать только с числами, что затрудняет понимание компьютерного языка людьми.

Решение этой проблемы заключается в создании промежуточного языка, понятного как людям, так и компьютерам. Это так называемые языки программирования. Программисты создают список инструкций для компьютера на таком языке программирования, как C, Pascal или Fortran. Этот список инструкций известен как исходный код. Он носит текстовый характер и доступен для чтения людям (говорящим на этом языке). Программисты выполняют всю свою работу в этом исходном коде, изменяя инструкции для исправления ошибок, добавления функций или изменения внешнего вида программы.

Когда программист считает, что он усовершенствовал инструкции для своей программы, он использует специальную программу, называемую компилятором, для преобразования своих текстовых инструкций, понятных человеку, в числа, читаемые компьютером, которые соответствуют тем же инструкциям. Полученный файл может использоваться компьютерами, но непонятен людям. Это называется объектный код. Полученный исполняемый файл часто называют двоичным по системе счисления, используемой компьютером. Этот перевод из исходного кода в двоичный объектный код является односторонним процессом. Невозможно преобразовать двоичный исполняемый файл обратно в исходный код.

Двоичный исполняемый файл — это то, что вам нужно, если вы хотите запустить и использовать программу. Обычно это то, что вы получаете, когда покупаете упакованное программное обеспечение в розничном магазине. Исходный код — это то, что вам нужно, если вы хотите понять, как программа работает внутри, или если вы хотите изменить, добавить или улучшить программу. Если у вас есть исходный код и соответствующий компилятор, вы можете создать двоичный исполняемый файл, но обратное неверно.

Если вы загрузили архив с исходным кодом, вам придется скомпилировать его перед установкой. В каталоге верхнего уровня вашего извлеченного исходного кода обычно есть файл README или INSTALL, который дает вам инструкции о том, как скомпилировать и установить пакет. Некоторые инструкции лучше других, и редко они расскажут вам все, что вам нужно знать. Надеемся, что это руководство поможет заполнить некоторые пробелы.

Краткий пример¶

Типичное заклинание для установки пакета с исходным кодом выглядит примерно так.

Распаковка архива¶

В зависимости от типа полученного архива команда для его распаковки может немного отличаться. Выше приведены некоторые популярные примеры. tar — это утилита Unix (Tape ARchiver) для работы со связанными файловыми архивами. Типичные командные переключатели: x для извлечения файлов, v для подробного режима, чтобы вы могли сказать, что происходит, f, указывающего, что будет имя файла, которому нужно следовать. Если имя файла заканчивается на .tar, это все, что вам нужно, но обычно файл tar сжимается с помощью другой утилиты. Файлы, оканчивающиеся на .gz, были сжаты с помощью gzip. Для этого добавьте флаг z в список параметров. Файлы, заканчивающиеся на .bz2, были сжаты утилитой bzip2. Для них добавьте флаг j или, если это не так, --bzip2 .

Иногда вы столкнетесь с архивом, доставленным в файле .zip. Используйте утилиту unzip, чтобы распаковать их. (Обратите внимание, что вам, возможно, придется сначала установить распакованный пакет.)

Некоторые загружаемые файлы могут быть встроены в самораспаковывающиеся zip-архивы с расширением .exe. Обычно unzip также может распаковывать эти файлы, но имейте в виду, что все, что упаковано таким образом, почти наверняка предназначено для машины с Windows, а не для вашей машины с Linux. Программы, упакованные таким образом, вероятно, не будут работать в Linux. Но у вас может быть архив, содержащий только шрифты или документацию, и с этим все в порядке.

Настройка¶

Обычные шаги по настройке и установке программного обеспечения таковы.

Основная задача скрипта configure — получить информацию о вашей системе и «настроить» исходный код для работы с ней. Обычно он отлично справляется с этой задачей. Второстепенная задача скрипта configure — позволить вам, системному администратору, немного настроить программное обеспечение. Выполнение ./configure --help должно дать вам список аргументов командной строки, которые вы можете передать в скрипт configure. Обычно эти дополнительные аргументы предназначены для включения или отключения дополнительных функций программного обеспечения, и часто их можно игнорировать и просто ввести ./configure, чтобы принять конфигурацию по умолчанию.

Существует один общий аргумент для настройки, о котором вам следует знать. Аргумент --prefix определяет, где вы хотите установить программное обеспечение. В большинстве пакетов с исходным кодом по умолчанию используется /usr/local/, и обычно это именно то, что вам нужно.Но иногда у вас может не быть root-доступа к системе, и вы хотели бы установить программное обеспечение в свой домашний каталог. Вы можете сделать это с помощью последней команды в примере, ./configure --prefix=/home/$ (где $ — ваше имя пользователя).

Компиляция, установка и удаление¶

Следующий шаг — вызвать утилиту GNU Make, чтобы прочитать Makefile и скомпилировать программу для вас. В отличие от оболочки Linux, make ищет свой Makefile в текущем каталоге, поэтому вам не нужно ничего указывать. Вы должны знать, что компиляция программного обеспечения может занять много времени. Компиляция простой программы может занять всего минуту или две, но если вы планируете скомпилировать весь KDE из исходного кода, вам, возможно, придется ждать часы или даже дни в зависимости от скорости вашего компьютера. Кроме того, нет ничего необычного в том, что во время компиляции программного обеспечения прокручиваются сотни предупреждений компилятора. Если вам повезет, программное обеспечение все равно скомпилируется.

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

Большинство ошибок, с которыми вы столкнетесь при компиляции, связано с отсутствием библиотек, от которых зависит программное обеспечение. Каждый случай уникален, но следите за фразами «не найдено» или «невозможно найти». Обычно вам просто нужно установить «разрабатываемые» версии необходимых библиотек. Обычно они доступны в пакетах поставщиков вашей операционной системы. Найдите пакеты с именами, оканчивающимися на «-devel».

Это проблема, которая действительно ограничивает мое удовольствие от Linux. Если приложение не находится в репозитории или у него нет сценария установки, то мне действительно трудно, где и как установить приложение из исходного кода.

По сравнению с Windows это просто. Вам (в значительной степени) необходимо использовать приложение-установщик, которое выполняет всю работу мастера. С линуксом. не очень.

Итак, есть ли у вас какие-либо советы или инструкции по этому поводу, или есть ли веб-сайты, на которых подробно объясняется, как, почему и где устанавливать программы для Linux из исходного кода?

"По сравнению с Windows это просто. Вам (в значительной степени) необходимо использовать приложение-установщик, которое выполняет всю работу в мастере. С Linux не так уж и много." В вопросе есть слабое место. В Windows вы редко получаете исходный код, поэтому вы зависите от того, кто сделал пакет. Если подумать, это не так уж сильно отличается от высказывания «не было пакета для Linux, поэтому мне пришлось собирать из исходников», т.е. не было способа получить его с самого начала. Сборка из исходного кода обычно является последним средством в *nix-land, но редко в Windows-ville.

Как говорится. +1 удар за общий вопрос, на который следует ответить всем новичкам в системах * nix. :) Сборка из исходного кода иногда означает разницу между исправлением неприятной ошибки и просто страданием до следующего выпуска программного обеспечения. На самом деле это не так уж плохо, и, как многие здесь отметили, если вы знаете, что искать и как это сделать, довольно безболезненно.

5 ответов 5

Обычно у проекта есть веб-сайт с инструкциями по его сборке и установке. Сначала погуглите.

По большей части вы будете делать либо:

  1. Загрузить tar-архив (файл tar.gz или tar.bz2), который представляет собой выпуск определенной версии исходного кода.
  2. Извлеките архив с помощью команды tar zxvf myapp.tar.gz для архива, сжатого с помощью gzip, или tar jxvf myapp.tar.bz2 для архива, сжатого с помощью bzip.
  3. перейдите в каталог, созданный выше
  4. запустить ./configure && make && sudo make install
  1. Используйте git, svn или что-то еще, чтобы получить последний исходный код из официального репозитория исходных кодов.
  2. перейдите в каталог, созданный выше
  3. запустите ./autogen.sh && make && sudo make install

Как configure, так и autogen.sh принимают аргумент --prefix, чтобы указать, где установлено программное обеспечение. Я рекомендую проверить Куда я должен поместить программное обеспечение, которое я компилирую самостоятельно? за советом о том, где лучше всего установить специально созданное программное обеспечение.

Обычно люди, которым нужно "передовое" программное обеспечение, получают выпуск из программного обеспечения контроля версий (например, git, subversion или CVS). Это «крайний край», потому что он, вероятно, не тестировался, в отличие от выпущенного архива, за который (вероятно) ручались как работающий (по крайней мере, в основном). Имеет смысл?

@Matt, конечно, это имеет смысл, но я думаю, что комментарий был больше направлен на тот факт, что Сэнди теперь создал впечатление, будто в каждом git'd/svn'd транке есть autogen.sh.

И по курице в каждой кастрюле. или что-то подобное.Черт возьми, время от времени я тоже сталкиваюсь с программами без скрипта настройки. Если бы существовал простой унифицированный способ сделать это, нам бы не понадобились пакеты ;-)

Мэтт абсолютно прав, поэтому я сказал "по большей части" и сначала предложил поискать информацию на веб-сайте проекта. Совет autogen.sh/configure применим почти ко всем модулям GNOME, а также к множеству других проектов. Некоторые проекты не используют automake и будут иметь только Makefile, и вы просто запустите make && sudo make install . Некоторые проекты Python будут иметь только setup.py, который вы вызовете для установки (поскольку нет реальной настройки компиляции). Также существует множество других систем сборки/установки. Надеемся, что файлы README или INSTALL точно объяснят, что делать.

Я просто хочу добавить, что существуют менеджеры пакетов, которые компилируют пакеты из исходного кода и обрабатывают все зависимости пакетов, флаги и т. д.

В Debian менеджер пакетов apt-get также может устанавливать из исходного кода: APT HOWTO: Работа с исходными пакетами (то же самое касается Ubuntu, Linux-mint и всего остального, основанного на Debian)

В дистрибутиве Gentoo используется диспетчер пакетов portage, который компилирует всю систему только из исходного кода: Введение в Portage.

Slackware может компилировать пакеты, но я не знаю, есть ли для этого какой-нибудь менеджер пакетов.. =)

В любом случае, вы всегда можете скомпилировать пакеты вручную, как Сэнди, упомянутый выше =) Также должна быть возможность использовать менеджеры пакетов apt-get или portage в любом другом дистрибутиве.

Сказать, что "менеджер пакетов apt-get может установить из исходного кода", неверно. В цитируемом разделе описывается, как можно создать пакет Debian из исходников Debian. Не произвольные исходные источники.

Я думаю, что лучше всего прочитать документацию, прилагаемую к конкретной программе или приложению, которое вы хотите установить. Обычно внутри tar-архивов (исходный архив приложения, который вы обычно можете скачать) есть файлы readme/README или, может быть, даже файлы INSTALL, чтобы прочитать и узнать, какой предпочтительный способ установки указанного приложения. Короче: RTFM ;)

Я пришел сюда, потому что в README приведены все требования для сборки под Linux, но есть только инструкции по установке для Windows. Принятый ответ сработал для меня и, вероятно, работает большую часть времени. Я думаю, что лучше всего попробовать маршрут ./configure и перейти к README, если он не работает (т. е. отсутствует зависимость и вы не можете прочитать вывод компилятора).

Краткий обзор использования коллекции портов во FreeBSD:

Найти порт

Порты организованы по категориям, поэтому, если вы не знаете, к какой категории относится порт, вам нужно сначала найти его:

Иногда таких записей слишком много. Я лично предпочитаю:

Используйте * при поиске, так как часто доступно несколько версий порта. Аргумент глубины гарантирует, что ваши возвращаемые результаты не будут излишне загромождены совпадениями, которые вам вряд ли нужны.

Конфигурация

Часто вам нужно выполнить некоторые настройки; программное обеспечение, такое как Apache и Postgres, практически требует этого. Есть три основных варианта: командная строка, окружение и создание файлов конфигурации. Чтобы начать работу с командной строкой:

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

откроется диалоговое окно, в котором вы можете выбрать нужные параметры. (Не путайтесь с этим и сделайте configure, который настраивает ваш порт с выбранными вами параметрами!) Часто этого достаточно, но для некоторых программ, таких как Apache, часто бывает сложная конфигурация, которую можно выиграть в простом диалоговом окне. не справиться. Для этого вам также следует просмотреть Makefile(ы), которые иногда будут давать вам некоторые дополнительные цели для make, которые дадут вам больше информации. Чтобы продолжить пример Apache

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

Кроме того, вы можете установить параметры переключения с помощью параметра -D:

Однако для сложной конфигурации командная строка не подойдет, и лучше ни один из первых двух методов не будет эффективен. В этом случае вы можете создать файл конфигурации и передать его make с помощью переменной __MAKE_CONF. FreeBSD имеет файл конфигурации по умолчанию: /etc/make.conf, который обычно содержит информацию о ранее установленных портах и ​​других системных настройках. Для начала создайте файл с параметрами ваших портов, назовите его ~/myport.mk, а затем объедините этот файл с /etc/make.conf:

затем вы можете перепроверить свою конфигурацию:

и если все выглядит хорошо:

ОСТОРОЖНО! Если вам нужно настроить параметры конфигурации после make configure или установки полностью или частично, вы обязательно сначала очистите свою конфигурацию:

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

Это многовато для краткого обзора, но сложность настройки в основном связана с приложением, а не с портом. Bash, например, не имеет никаких вариантов.

Установка

Это самая простая часть:

что просто больше печатает.

Это почти все. Очевидно, что вы можете сделать больше, например, рекурсивно перечислить зависимости и параметры конфигурации, обновить с помощью патчей и так далее. Здесь я отсылаю вас к разделу «Порты» Руководства, справочной странице подсистемы портов (хорошая информация о дополнительных целях make) и справочной странице make.

Хотя в Linux есть менеджеры пакетов, значительно упрощающие установку программного обеспечения, иногда вам приходится собирать пакет из исходного кода.

Вы хотите исправить ошибку в программном пакете или просто изменить пакет в соответствии со своими потребностями? Linux поможет вам.

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

Давайте рассмотрим, как скомпилировать и установить пакет из исходного кода в Linux.

Шаг 1. Установка необходимых инструментов

Linux предоставляет все необходимые инструменты для компиляции, сборки и установки программного обеспечения из исходного кода.

Большинство программного обеспечения для Linux написано на языках программирования C или C++, поэтому вам потребуется компилятор C или C++. Например, Коллекция компиляторов GNU (GCC) и CMake для сборки вашего пакета.

Помимо этого, вам потребуются другие пакеты, такие как curl и gettext. В зависимости от вашего дистрибутива Linux вы можете установить необходимые инструменты одной командой следующим образом.

В дистрибутивах на основе Debian, таких как Ubuntu:

В Arch Linux и его производных:

В дистрибутивах на основе RPM, таких как Fedora, RHEL и т. д.:

Шаг 2. Загрузка исходного кода пакета

В этом руководстве мы будем устанавливать пакет Git из исходного кода. Мы выбрали Git, потому что он широко используется инженерами и разработчиками программного обеспечения.

Большинство пакетов, которые вы можете скомпилировать, можно найти на официальном сайте соответствующего пакета. Вы можете загрузить файлы исходного кода с помощью инструмента командной строки curl. Кроме того, вы можете использовать wget или графический интерфейс.

Загрузите исходный код в папку «Загрузки» на своем ПК, затем перейдите в папку «Загрузки» с помощью команды cd.

После того, как вы окажетесь в папке «Загрузки», вы можете загрузить исходный код Git с помощью curl следующим образом. В этом руководстве мы загрузим Git версии 2.26.2, но вы можете выбрать любую версию.

Команда curl указывает, что исходный код следует поместить в заархивированный файл с именем git.tar.gz.

В большинстве случаев исходный код будет упакован в сжатую папку, чтобы упростить загрузку и улучшить организацию файлов исходного кода.

Чтобы извлечь содержимое заархивированного файла, вы можете использовать команду tar.

Шаг 3. Компиляция исходного кода

Далее перейдите к только что извлеченной папке. В этом случае имя будет "git-2.26.2", конечно, имя папки будет другим, если вы загрузили другую версию Git.

Всегда полезно взглянуть на файлы README.md или INSTALL, поскольку они содержат ценную информацию о том, как скомпилировать и установить пакет. Эти файлы обычно находятся в корневой папке исходного кода.

Другим важным файлом является скрипт configure. Он проверяет программные зависимости для пакета, который вы хотите скомпилировать, и вы увидите сообщение об ошибке, если скрипт обнаружит отсутствующие зависимости.

Настройте и подготовьте исходный код, выполнив скрипт. Команда создаст make-файлы и конфигурации для программного обеспечения, которое вы собираетесь скомпилировать и установить.

Шаг 4. Сборка программного пакета

Теперь, когда исходный код сконфигурирован и скомпилирован, вы можете собрать программное обеспечение следующим образом:

Команда make использует файл Makefile, содержащий необходимые инструкции по сборке программного пакета.

Процесс компиляции займет некоторое время в зависимости от вычислительной мощности вашего компьютера и размера пакета.

Шаг 5. Установка программного пакета

Если вы зашли так далеко, поздравляем, вы успешно скомпилировали и собрали программное обеспечение Linux из исходного кода.

На этом последнем шаге вы установите программный пакет Git, который вы только что создали из исходного кода. Эта команда устанавливает только что скомпилированный пакет, копируя файлы сборки в нужные места на вашем ПК.

Проверьте версию Git, которую вы только что установили, с помощью команды:

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

Альтернативные методы установки программного обеспечения в Linux

В этом руководстве рассматривается, как компилировать и создавать программное обеспечение из исходного кода в Linux с использованием Git в качестве учебного примера. Установка программного обеспечения из исходного кода дает вам столько свободы в настройке программного обеспечения по своему вкусу, что просто замечательно.

Большинство дистрибутивов Linux предоставляют множество вариантов установки программного обеспечения. Например, в Arch Linux вы можете использовать менеджеры пакетов Pacman и Yay.

Пользователям Linux обычно несложно найти и установить программное обеспечение. Почти в каждом дистрибутиве есть репозиторий программного обеспечения с красивым графическим интерфейсом. Чтобы установить программу, вам обычно нужно только найти ее, а затем нажать кнопку «Установить». Если программное обеспечение недоступно в репозитории, вы обычно можете найти предварительно скомпилированные двоичные файлы где-нибудь в Интернете. Затем достаточно запустить apt-get , yum или что-то подобное (в зависимости от того, какой дистрибутив Linux вы используете) для их установки. Однако иногда у вас нет другого выбора, кроме как компилировать программы для Linux из исходного кода самостоятельно, особенно если вам нужна новейшая разрабатываемая версия программы, для которой не существует предварительно скомпилированных двоичных файлов.

Хотите научиться компилировать программы для Linux из исходного кода? Тогда читайте дальше!

По какой-то причине перспектива компилировать программы для Linux из исходного кода пугает многих пользователей Linux, даже тех, кто использует операционную систему годами. Но это не должно их пугать. Установка программного обеспечения из файлов исходного кода в большинстве случаев является простой операцией. А если вы изучите основные приемы, то вскоре сможете диагностировать проблемы, возникающие в тех случаях, когда что-то идет не по плану.

Также прочтите: Как использовать компилятор G++ в Linux

Шаги, необходимые для компиляции программ Linux из исходного кода

Для компиляции программ Linux из исходного кода используйте четырехэтапный процесс:

  1. Распаковать исходный код
  2. Устранение зависимостей
  3. Скомпилируйте
  4. Установить

1. Распаковка исходного кода

В этом примере мы собираемся скомпилировать базу данных SQLite. Если вы хотите продолжить, загрузите последнюю версию tar-архива с исходным кодом (файл .tar.gz).

Архив представляет собой просто сжатый файл, очень похожий на файл .zip. Он будет иметь расширение tar.gz или .tgz. Чтобы работать с его содержимым, вы должны сначала извлечь его с помощью следующей команды:

Иногда у вас будет файл tar.bz (или tar.bz2 ). Используйте следующую команду, если вы работаете с файлом tar.bz:

Этот процесс создает каталог с тем же именем, что и файл.

2. Разрешение зависимостей

Войдите в этот новый каталог, используя имя каталога cd, а затем от имени sudo (или su во многих других дистрибутивах Linux) выполните команду ./configure:

Команда ./configure проверяет, установлено ли все программное обеспечение, от которого зависит эта конкретная программа, например соответствующий компилятор. Префикс ./ указывает Linux искать файл конфигурации в текущем каталоге и выполнять его. Обратите внимание, что иногда configure не является именем файла, разрешающего эти зависимости. Если вы получаете сообщение об ошибке при запуске configure, найдите в каталоге файл «README», «INSTALL» или аналогичный. Это должно сказать вам, какой файл отвечает за этот шаг. На самом деле рекомендуется прочитать все включаемые файлы, прежде чем пытаться скомпилировать какую-либо программу.

Если все пойдет хорошо, вы не увидите никаких ошибок. Нам тут повезло. Однако обычно вам чего-то не хватает. Просто изучите вывод и установите все недостающие зависимости с помощью диспетчера пакетов. Запускайте ./configure снова, пока не увидите больше ошибок.

3. Компиляция

После того как вы разрешили все зависимости, вы должны скомпилировать программу. Для этого используйте команду make:

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

4. Установка

На этом этапе вы скомпилировали двоичные файлы, но теперь вам нужно их установить. Просто выполните make install . Этот шаг перемещает все двоичные файлы в правильное место в вашей системе, чтобы ваша программа была готова к использованию:

Если вы следовали инструкциям, запустите sqlite3 в командной строке терминала, и если база данных была установлена ​​правильно, вы должны увидеть приглашение базы данных sqlite3.

Поздравляем! Но что, если вы хотите удалить только что установленную программу? Это просто. Просто зайдите в каталог, из которого вы установили программу, и выполните:

Заключение

Таким способом легко установить большинство программ из исходного кода, но для некоторых требуется несколько отличных от показанных здесь шагов. Например, вам может понадобиться использовать cmake вместо make. Всегда читайте прилагаемые «README», «INSTALL» или другую документацию, предоставленную разработчиками, и вы не ошибетесь.

Наши последние учебные пособия доставляются прямо на ваш почтовый ящик

Популярные сообщения

Что такое Void Linux и как его установить

5 отличных помощников AUR для Arch Linux

5 дистрибутивов Arch Linux, которые проще установить и использовать

Что такое Doom Emacs и как его установить

Как исправить ошибку «Не могу ввести текст в терминале» в Linux

Как использовать команду dd в Linux

Как установить и настроить bspwm в Linux

Что такое Log4Shell и как защитить от него систему Linux

Как зашифровать файлы в облаке с помощью Rclone

Как настроить SFTP-сервер в Linux

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