Внутреннее устройство Linux
Шрифт:
Ошибка
Сообщение об ошибке компилятора (препроцессора):
src.c:4: pkg.h: No such file or directory
(long list of errors follows)
Объяснение и устранение
Компилятор запустил препроцессор C для файла src.c, но не смог найти включаемый файл pkg.h. Исходный код, вероятно, зависит от библиотеки, которую необходимо установить, или же необходимо указать для компилятора нестандартный путь с включаемыми файлами. Как правило, вам понадобится лишь добавить параметр -I к флагам препроцессора C (CPPFLAGS), чтобы добавить этот путь. Помните
Если ситуация не похожа на отсутствие библиотеки, есть незначительная вероятность того, что вы пытаетесь скомпилировать файл для операционной системы, которая не поддерживается данным исходным кодом. Ознакомьтесь с файлами Makefile и README, чтобы узнать подробности о платформах.
Если вы работаете с версией ОС на основе Debian, попробуйте применить команду apt-file к имени заголовочного файла:
$ apt-file search pkg.h
Это может выявить необходимый пакет разработки. Для версий, которые содержат утилиту yum, попробуйте такой вариант:
$ yum provides */pkg.h
Ошибка
Сообщение утилиты make:
make: prog: Command not found
Объяснение и устранение
Чтобы собрать пакет, в вашей системе должна быть программа prog. Если таковой является что-либо вроде cc, gcc или ld, то в системе не установлены утилиты для разработки. С другой стороны, если вы полагаете, что команда prog уже установлена в системе, попробуйте изменить файл Makefile, чтобы выяснить полный путь к команде prog.
В редких случаях команда make собирает программу prog, а затем немедленно ее использует, считая, что текущий каталог (.) расположен в командном пути. Если переменная $PATH не содержит текущий каталог, можно отредактировать файл Makefile и изменить prog на ./prog. Как вариант, можно было бы на время добавить точку к имени пути.
16.7. Заглядывая вперед
Мы только затронули основы сборки программного обеспечения. Вот несколько дополнительных направлений, которые вы можете исследовать, когда займетесь собственными разработками.
• Понимание того, как использовать другие системы компоновки, кроме утилиты Autoconf (например, CMake и SCons).
• Настройка сборок для вашего ПО. Если вы разрабатываете собственные программы, вам необходимо выбрать систему сборки и научиться применять ее. При создании пакетов с помощью утилиты GNU Autoconf вам может пригодиться книга Джона Кэлкоута (John Calcote) Autotools («Утилиты Autotools») (No Starch Press, 2010).
• Компиляция ядра системы Linux. Система сборки ядра полностью отличается от других инструментов. У нее есть собственная система конфигурирования, предназначенная для точной подгонки под ваше ядро и модули. Однако сама процедура проста. Если вы понимаете, как работает загрузчик системы, у вас не возникнет никаких затруднений. Тем не менее следует с осторожностью заниматься этим: всегда проверяйте, что у вас под рукой есть старое ядро на тот случай, когда вы не сможете загрузиться с помощью нового.
• Специализированные пакеты исходного кода. Дистрибутивы Linux поддерживают собственные версии исходного программного кода в качестве специальных пакетов исходного кода. Иногда могут оказаться полезными исправления, которые расширяют функциональность или исправляют ошибки, недоступные для исправления как-либо иначе. Системы для управления пакетами исходного кода содержат инструменты для автоматической сборки, например debuild в Debian и mock для систем на основе RPM.
Сборка программного обеспечения — это зачастую стартовая площадка для изучения языков программирования и методов разработки ПО. Инструменты, которые вы видели в последних двух главах, снимают завесу тайны с того, откуда берутся ваши системные программы. Совсем несложно выполнить дальнейшие шаги: заглянуть в исходный код, внести изменения и создать собственную программу.
17. Строим на фундаменте
В главах этой книги были рассмотрены фундаментальные компоненты системы Linux, начиная с низкоуровневой организации ядра и процессов, устройства сети и заканчивая некоторыми инструментами, предназначенными для сборки программного обеспечения. В итоге вы умеете делать довольно многое. Поскольку Linux поддерживает почти любой тип общедоступной среды программирования, приложения доступны в изобилии. Рассмотрим некоторые прикладные области, в которых преуспевает Linux, и поймем, как к ним относится то, что вы узнали из этой книги.
17.1. Веб-серверы и приложения
Linux является популярной системой для веб-серверов, а правящим монархом среди серверов приложений Linux является Apache HTTP Server (который обычно называют просто Apache). Другим веб-сервером, о котором вы часто будете слышать, является Tomcat (это также проект разработчиков Apache); он обеспечивает поддержку Java-приложений.
Сами по себе веб-серверы выполняют немногое: они могут хранить файлы, и на этом все. Конечной целью большинства веб-серверов, таких как Apache, является предоставление платформы для использования веб-приложений. Например, проект Wikipedia построен на пакете MediaWiki, который вы можете использовать, чтобы организовать собственный wiki-проект. Системы управления контентом вроде Wordpress и Drupal позволяют вам создавать собственные блоги и мультимедийные сайты. Все эти приложения основаны на языках программирования, которые особенно хорошо проявляют себя в Linux. Так, например, системы MediaWiki, Wordpress и Drupal написаны на языке PHP.
Строительные блоки, из которых составлены веб-приложения, являются в большой степени модульными, поэтому легко добавлять собственные расширения и создавать приложения с помощью таких фреймворков, как Django, Flask и Rails, которые предоставляют средства для распространенных веб-инфрастуктур и функций, например, использование шаблонов, управление многими пользователями и поддержка баз данных.
Нормально функционирующий веб-сервер зависит от прочного основания в виде операционной системы. В частности, чрезвычайно важным является материал, изложенный в главах 8–10.