Симон! Я знаю, что ты чувствуешь; Я тоже боролся с этой частью изучения Linux. Основываясь на своем собственном опыте, я написал учебник о некоторых элементах, к которым вы обращаетесь (в основном в качестве справки для себя!): Http://easyaspy.blogspot.com/2008/12/buildinginstall-application-from.html . Я думаю, вы оцените мою заметку о том, как простые приложения Python собирать / устанавливать. :)
Надеюсь, что это поможет! И счастливой компиляции.
Тим Джонс
Сборка / установка приложения из исходного кода в Ubuntu Linux
В то время как репозитории Ubuntu переполнены отличными приложениями, в тот или иной момент вы обязательно столкнетесь с этим «обязательным» инструментом, которого нет в репозиториях (или не имеет пакета Debian), или вам нужен более новая версия, чем в репозиториях. Чем ты занимаешься? Ну, вы должны собрать приложение из исходного кода! Не волнуйтесь, это действительно не так сложно, как кажется. Вот несколько советов, основанных на моем опыте перехода от уровня любителя! (Хотя я использую Ubuntu для этого примера, общие понятия должны быть применимы к большинству любых дистрибутивов Unix / Linux, таких как Fedora, и даже к платформе Cygwin в Windows.)
Основной процесс сборки (компиляции) большинства приложений из исходных текстов выполняется следующим образом: configure -> compile -> install. Типичные команды Unix / Linux для выполнения этих действий: config
-> make
-> make install
. В некоторых случаях вы даже найдете веб-страницы, которые показывают, что все это можно объединить в одну команду:
$ config && make && make install
Конечно, эта команда предполагает, что нет никаких проблем ни на одном из этих шагов. Здесь начинается самое интересное!
Начиная
Если вы ранее не компилировали приложение из исходного кода в своей системе, вам, вероятно, потребуется настроить его с помощью некоторых общих инструментов разработки, таких как gcc
набор компиляторов, некоторые распространенные заголовочные файлы (воспринимайте это как код, который уже был написан кем-то еще, который используется программой, которую вы устанавливаете), и инструментом make. К счастью, в Ubuntu есть метапакет, build-essential
который будет устанавливать его. Чтобы установить его (или просто убедиться, что он у вас уже есть!), Запустите эту команду в терминале:
$ sudo apt-get install build-essential
Теперь, когда у вас есть базовая настройка, загрузите исходные файлы приложения и сохраните их в каталоге, для которого у вас есть разрешения на чтение / запись, например в «домашнем» каталоге. Как правило, они находятся в архивном файле с расширением либо либо, .tar.gz
либо .tar.bz2
. Это .tar
просто означает, что это «ленточный архив», который представляет собой группу файлов, сохраняющую их относительную структуру каталогов. Это .gz
означает gzip (GNU zip), который является популярным форматом сжатия Unix / Linux. Точно так же .bz2
расшифровывается как bzip2, который является более новым форматом сжатия, который обеспечивает более высокое сжатие (меньший размер сжатого файла), чем gzip.
После того, как вы загрузили исходный файл, откройте окно терминала (системный терминал из меню Ubuntu) и перейдите в каталог, в котором вы сохранили файл. (Я буду использовать ~/download
в этом примере. Здесь '~' - это ярлык для вашей "домашней" директории.) Используйте команду tar, чтобы извлечь файлы из загруженного архивного файла:
Если ваш файл является архивом gzip (например, заканчивается на .tar.gz
), используйте команду:
$ tar -zxvf filename.tar.gz
Если ваш файл является архивом bzip2 (например, заканчивается на .tar.bz2
), используйте команду:
$ tar -jxvf filename.tar.gz
Совет: если вы не хотите запоминать все параметры командной строки для извлечения архивов, я рекомендую приобрести одну (или обе) из этих утилит: dtrx (моя любимая!) Или deco (более популярная). Используя любую из этих утилит, вы просто вводите название утилиты (dtrx или deco) и имя файла, оно делает все остальное. Оба они «знают», как обрабатывать большинство форматов архивов, с которыми вы, вероятно, столкнетесь, и у них отличная обработка ошибок.
При сборке из исходного кода вы можете столкнуться с двумя распространенными типами ошибок:
- Ошибки конфигурации возникают, когда вы запускаете скрипт конфигурации (обычно называемый config или configure), чтобы создать make-файл, соответствующий вашей установке.
- Ошибки компилятора возникают, когда вы запускаете команду make (после того, как был сгенерирован make-файл), и компилятор не может найти какой-то необходимый ему код.
Мы рассмотрим каждый из них и обсудим, как их решить.
Конфигурация и ошибки конфигурации
После того, как вы извлекли файл архива исходного кода, в терминале вы должны перейти в каталог, содержащий извлеченные файлы. Обычно это имя каталога совпадает с именем файла (без расширения .tar.gz
или .tar.bz2
). Однако иногда имя каталога - это просто имя приложения без какой-либо информации о версии.
В исходном каталоге найдите README
файл и / или INSTALL
файл (или что-то с похожими именами). Эти файлы обычно содержат полезную информацию о том, как собирать / компилировать приложение и устанавливать его, включая информацию о зависимостях. «Зависимости» - это просто причудливые названия для других компонентов или библиотек, которые необходимы для успешной компиляции.
После того, как вы прочитали файл README
и / или INSTALL
(и, надеюсь, просмотрели любую соответствующую онлайн-документацию по приложению), найдите исполняемый файл (для которого в файле установлено разрешение "x") с именем config
или configure
. Иногда файл может иметь расширение, например .sh
(например, config.sh
). Обычно это сценарий оболочки, который запускает некоторые другие утилиты, чтобы подтвердить, что у вас есть «нормальная» среда для компиляции. Другими словами, он проверит, чтобы убедиться, что у вас установлено все, что вам нужно.
Совет: Если это приложение на основе Python, а не файл конфигурации, вы должны найти файл с именем setup.py
. Приложения Python, как правило, очень просты в установке. Чтобы установить это приложение от имени пользователя root (например, поместите sudo перед следующей командой под Ubuntu), выполните эту команду:
$ python setup.py install
Это должно быть все, что вам нужно сделать. Вы можете пропустить оставшуюся часть этого руководства и перейти непосредственно к использованию и использованию своего приложения.
Запустите скрипт настройки в терминале. Как правило, вы можете (и должны!) Запускать свой конфигурационный скрипт с учетной записью обычного пользователя.
$ ./config
Скрипт отобразит некоторые сообщения, чтобы дать вам представление о том, что он делает. Зачастую сценарий дает вам представление о том, успешно он или нет, а в случае неудачи - некоторую информацию о причине сбоя. Если вы не получаете никаких сообщений об ошибках, то обычно можно предположить, что все прошло нормально.
Если вы не найдете ни одного скрипта, который выглядит как скрипт конфигурации, то это обычно означает, что приложение очень простое и не зависит от платформы. Это означает, что вы можете просто перейти к шагу сборки / компиляции, приведенному ниже, потому что предоставленный Makefile
должен работать на любой системе.
Пример
В этом руководстве я собираюсь использовать текстовую программу чтения RSS под названием Newsbeuter в качестве примера типов ошибок, с которыми вы можете столкнуться при создании приложения. Для Newsbeuter, имя сценария настройки config.sh
. В моей системе при запуске config.sh
возникают следующие ошибки:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Проведя некоторые исследования, я обнаружил, что на самом деле sqlite3
приложение было установлено. Однако, так как я пытаюсь собрать из исходного кода, это совет, который на config.sh
самом деле ищет библиотеки разработки (заголовки) sqlite3
. В Ubuntu большинство пакетов имеют связанный с ним пакет разработки, который заканчивается на -dev
. (Другие платформы, такие как Fedora, часто используют суффикс пакета -devel
для пакетов разработки.)
Чтобы найти подходящий пакет для пакета sqlite3
разработки, мы можем использовать apt-cache
утилиту в Ubuntu (и, аналогично, yum
утилиту в Fedora):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Эта команда возвращает довольно большой список результатов, поэтому нам нужно проделать небольшую детективную работу, чтобы определить, какой пакет является подходящим. В этом случае соответствующий пакет оказывается libsqlite3-dev
. Обратите внимание, что иногда пакет, который мы ищем, будет иметь lib
префикс, а не просто имя пакета плюс -dev
. Это потому, что иногда мы просто ищем разделяемую библиотеку, которая может использоваться многими различными приложениями. Чтобы установить libsqlite3-dev
, выполните типичную команду apt-get install в терминале:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Теперь нам нужно запустить config.sh
снова, чтобы убедиться, что мы решили эту проблему с зависимостями и у нас больше нет проблем с зависимостями. (Хотя я не буду показывать это здесь, в случае Newsbeuter мне также пришлось установить libcurl4-openssl-dev
пакет.) Кроме того, если вы устанавливаете пакет разработки (например libsqlite3-dev
), а соответствующий пакет приложения (например, sqlite3
) не уже установлено, большинство систем автоматически установят соответствующий пакет приложений одновременно.
Когда конфигурация будет выполнена успешно, в результате будет создан один или несколько файлов make. Эти файлы обычно называются Makefile
(помните, что регистр имени файла имеет значение в Unix / Linux!). Если пакет сборки включает в себя подкаталоги, такие как src
и т. Д., Каждый из этих подкаталогов также будет содержать a Makefile
.
Ошибки сборки и компиляции
Теперь мы готовы фактически скомпилировать приложение. Это часто называют строительством, а название заимствовано из реального процесса конструирования чего-либо. Различные «части» приложения, которые обычно представляют собой несколько файлов исходного кода, объединяются вместе, чтобы сформировать общее приложение. Утилита make управляет процессом сборки и вызывает другие приложения, такие как компилятор и компоновщик, для фактического выполнения работы. В большинстве случаев вы просто запускаете make (со своей учетной записью обычного пользователя) из каталога, в котором вы запустили конфигурацию. (В некоторых случаях, например, при компиляции приложений, написанных с использованием библиотеки Qt, вам потребуется вместо этого запускать другое приложение-оболочку, например qmake. Опять же, всегда проверяйте документы README
и / или INSTALL
документы для получения подробной информации.)
Как и в приведенном выше скрипте конфигурации, когда вы запускаете make (или аналогичную утилиту) в терминале, он отображает некоторые сообщения о том, что выполняется, и любые предупреждения и ошибки. Обычно вы можете игнорировать предупреждения, так как они в основном предназначены для разработчиков приложений и говорят им, что существуют некоторые стандартные методы, которые нарушаются. Обычно эти предупреждения не влияют на функцию приложения. С другой стороны, ошибки компилятора должны быть исправлены. С Newsbeuter, когда я запускал make, какое-то время все шло нормально, но потом я получил ошибку:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
Процесс make остановится, как только будет обнаружена первая ошибка. Обработка ошибок компилятора иногда может быть сложной задачей. Вы должны посмотреть на ошибки, чтобы найти подсказки о проблеме. Обычно проблема заключается в том, что некоторые заголовочные файлы, которые обычно имеют расширение .h
или .hpp
, отсутствуют. В случае ошибки выше, это (или должно быть!) Ясно, что проблема в том, что stfl.h
заголовочный файл не может быть найден. Как показывает этот пример, вы хотите просмотреть первые строки сообщения об ошибке и пройтись вниз, чтобы найти причину проблемы.
Посмотрев документацию Newsbeuter (которую я должен был сделать до того, как начал, но тогда эта часть руководства не будет иметь особого смысла!), Я обнаружил, что для этого требуется сторонняя библиотека под названием STFL. Так что же нам делать в этом случае? Что ж, мы, по сути, повторяем этот процесс для этой необходимой библиотеки: получите библиотеку и выполните для нее процесс configure-build-install, а затем возобновите сборку нужного приложения. Например, в случае STFL мне пришлось установить libncursesw5-dev
пакет для его правильной сборки. (Обычно нет необходимости повторять этап настройки нашего исходного приложения после установки другого необходимого приложения, но это также никогда не повредит.)
После успешной установки инструментария STFL процесс make для Newsbeuter прошел успешно. Процесс make обычно определяет, где он остановился (в точке ошибки). Таким образом, любые файлы, которые уже были успешно скомпилированы, перекомпилироваться не будут. Если вы хотите перекомпилировать все, вы можете запустить make clean all, чтобы удалить все скомпилированные объекты, а затем снова запустить make.
Установка
После успешного завершения процесса сборки вы готовы установить приложение. В большинстве случаев, чтобы установить приложение в общих областях файловой системы (например, /usr/bin
или /usr/share/bin
, и т. Д.), Вам потребуется запустить установку от имени пользователя root. Установка действительно самый простой шаг во всем процессе. Для установки в терминале запустите:
$ make install
Проверьте вывод этого процесса на наличие ошибок. Если все прошло успешно, вы сможете запустить имя команды в терминале, и она запустится. (Добавьте & в конец командной строки, если это приложение с графическим интерфейсом, или вы не сможете использовать сеанс терминала, пока приложение не завершит работу.)
Когда вы создаете приложение из исходного кода, оно обычно не добавляет значок или ярлык в меню GUI в Ubuntu. Вам нужно будет добавить это вручную.
И это в основном процесс, хотя потенциально итеративный, к созданию и установке приложения из исходного кода в Ubuntu. После того, как вы сделали это всего несколько раз, это станет вашей второй натурой!