Написать программу для linux
Без надёжных инструментов разработки вы не сможете воспользоваться лучшими преимуществами Linux. К счастью, Linux и открытое инструментальное программное обеспечение легко доступно. Однако, если вы новый пользователь, вы можете не знать, какие утилиты лучше выбрать, так что вот 10 выдающихся инструментов, которые помогут поднять вашу разработку на другой уровень.
1. Bluefish
Bluefish — одна из популярнейших интегрированных сред разработки, доступных для работы в вебе. Bluefish может обрабатывать языки программирования и языки разметки, но фокусируется на создании динамических и интерактивных веб-сайтов. Как и многие приложения для Linux, Bluefish быстр и лёгок — он использует примерно 30‒40 процентов ресурсов, потребляемых аналогичными приложениями.
Bluefish может открывать несколько документов одновременно: до 3 500 документов, если необходимо. Он включает в себя поддержку проекта, удалённую поддержку файлов, поиск и замену (включая регулярные выражения), неограниченную отмену/принятие сделанных изменений, настраиваемую подсветку синтаксиса для многих языков, сглаживание текста в окнах, а также поддержку различных кодировок.
Одной из лучших особенностей Bluefish является Quickbar — пользовательская панель, которая позволяет вам добавлять кнопки путём кликания по правой клавише мыши и выбора пункта «Добавить в Quickbar» (Add To Quickbar). Вы можете добавлять в Quickbar любую HTML-кнопку.
В Bluefish есть ряд простых инструментов, которые помогут вам добавить различные элементы в ваш код. Нужен auto-submit select box в DHTML? Легко. Выберите «Auto-submit Select Box» из выпадающего списка «DHTML» и заполните необходимые пункты для добавления элемента в ваш код. В Bluefish есть мастера для Си, Apache, DHTML, DocBook, HTML, PHP+HTML и SQL. Если вы разрабатываете свои сайты вручную, то без Bluefish вам не обойтись.
2. Anjuta
Anjuta — свободная открытая интегрированная среда разработки для языков Си и C++. Anjuta мощна и проста в установке (например, команда urpmi anjuta в Mandriva Linux). Anjuta предлагает такие функции, как управление проектами, прикладные мастера, интерактивный отладчик и мощный редактор исходного кода — с просмотром кода, его автозаполнением и подсветкой синтаксиса.
Anjuta имеет гибкий интерфейс пользователя, который позволяет вам перемещать (drag-and-drop) инструменты в набор инструментов для организации интерфейса пользователя в вариант, который вам больше нравится. Плюс каждый размещённый пользователем набор инструментов постоянен для проекта, так что вы можете иметь различные наборы инструментов для каждого проекта.
Anjuta также имеет мощную систему плагинов, которая позволяет вам решать для каждого проекта какие плагины активны, а какие — нет. И, как во всех открытых проектах, вы можете сами разработать свои плагины для Anjuta.
Одним из самых мощных инструментов в Anjuta является менеджер проекта. Он не только может открывать почти все проекты, основанные на Automake и Autoconf; он не добавляет никакой информации, связанной с Anjuta, так что ваш проект также может обслуживаться и разрабатываться вне Anjuta.
3. Glade
Glade — это RAD-инструмент, используемый для создания инструментария GTK+ и для среды рабочего стола GNOME. Его интерфейс подобен GIMP и может быть настроен и даже встроен в Anjuta.
Glade включает в себя ряд шаблонов, таких как текстовые блоки, диалоги, чекбоксы и меню, созданных для ускорения разработки интерфейсов. Конструкции интерфейса хранятся в XML, который позволяет им быть легко связанным со внешними инструментами.
Установка Glade проста. Например, в Fedora вы можете запустить команду yum install glade3 . В Glade нет такого мощного менеджера проекта как в Anjuta, но вы можете создавать, редактировать и сохранять проекты с Glade.
4. GCC
GCC — это набор компиляторов для Си, C++, Objective-C, Фортрана, Java и Ады, разработанный в рамках проекта GNU. Это инструмент командной строки, но он очень мощен. Многие интегрированные среды разработки имеют инструменты, которые являются только front-end’ами для GCC. Наиболее часто используются компиляторы для кода на Си и C++.
Как один инструмент компилирует приложения на разных языках? Просто: для Си вы применяете команду gcc, а для C++ вы применяете команду g++ — два компилятора в одном инструментарие. И g++ — компилятор, а не просто препроцессор.
GCC построит объектный код из исходного кода без использования посредника. Этот метод создаёт лучший объектный код и даёт вам больше отладочной информации.
5. Kdevelop
Kdevelop был создан в 1998 году как простая в использовании интегрированная среда разработки для среды рабочего стола KDE. Kdevelop в настоящее время распространяется под лицензией GNU General Public License и свободен для использования.
Он основан на плагинах, так что вы можете добавлять и удалять их для создания точно того, что вы хотите. Kdevelop также включает в себя поддержку профилей, так что различные наборы плагинов могут быть ассоциированы с конкретными проектами.
Kdevelop поддерживает 15 языков программирования, каждый из которых имеет свои языковые особенности. Он также предлагает отладчик, систему управления версиями Subversion, мастера приложений, просмотрщик документации, управление сниппетами, интеграцию Doxygen, инструменты RAD, поддержку Ctags, переформатирование кода, поддержку QuickOpen и панель окон с панелью инструментов.
Одной из лучших особенностей Kdevelop является то, что он снимает множество низкоуровневых задач из рук пользователей. Kdevelop включает в себя менеджер Automake.
6. GDB
GDB не является инструментом для разработчиков, но этот инструмент многие разработчики считают для себя важным. GDB — это отладчик проекта GNU.
- запускать ваше приложение с указанием аргументов, переключателей или вводов, которые будут влиять на его поведение;
- заставлять ваше приложение останавливаться на конкретном поведении;
- проверять что произошло, когда ваше приложение остановилось;
- добавлять изменения в вашу программу, так что вы можете тестировать прямо в полёте.
7. KompoZer
KompoZer — простой в использовании WYSIWYG-инструмент, направленный на нетехнических пользователей, которые хотят создать профессиональный веб-сайт без знания HTML.
KompoZer имеет ряд выдающихся особенностей. Одной из лучших особенностей является возможность открыть веб-сайт из URL, редактировать этот сайт и загрузить отредактированный сайт. Эта особенность упрощает обновление сайтов, лишая необходимости редактировать HTML. Конечно же, вам потребуется разрешение на загрузку сайта. Эта особенность также хороша для использоваия других сайтов в качестве шаблонов.
KompoZer не следует рассматривать только как инструмент для начинающих. Думайте о нём как о бесплатной открытой замене Microsoft FrontPage и Adobe Dreamweaver. И, как его более дорогостоящие альтернативы, в KompoZer можно перемещаться между WYSIWYG и редактированием кода путём кликания по табу.
8. Eclipse
Eclipse — мультиязычная интегрированная среда разработки, написанная на Java, с обширной системой плагинов, позволяющей вам расширить функциональность. Скачиваемый более миллиона раз ежемесячно, Eclipse — одно из сильнейших решений в области разработки программного обеспечения. Это, по сути, стандарт для открытой разработки.
Предположительно, сильнейшим аспектом Eclipse является особенность плагинов. Только для языков в Eclipse создано 58 плагинов. На этих языках не говорят — это языки разработки. Eclipse имеет огромное сообщество и множество организаций, предлагающих обучение интегрированным средам разработки, которое включает в себя даже университет Eclipse.
9. Make
Make — это утилита Linux, которая может автоматически определить, какие части программы нужно перекомпилировать. После того, как Make работает в частях, которые должны быть перекомпилированы, он выдаёт команды, необходимые для завершения действия.
Make часто используется при установке приложений из исходного кода, так что разработчики открытых приложений должны иметь хорошее представление об этом инструмение и о том, как он используется. Если вы планируете разработку приложения, которое можно будет установить из исходного кода, вам нужно знать как создавать Makefile.
Этот Makefile описывает отношения между разными файлами. Если вы знакомы с установкой приложений, вы знаете строковый тип ./configure; make; make install.
10. Quanta Plus
Quanta Plus — другой инструмент HTML для разработки, похожий на KompoZer. Он способен как на WYSIWYG, так и на ручной режим и поддерживает HTML, XHTML, CSS, XML и PHP.
Особенности Quanta Plus заключаются в завершении тегов на лету, управлении проектами, быстром предварительном просмотре, отладчике PHP, поддержке CVS и Subversion. Quanta Plus, в отличие от KompoZer, направлен на более опытного пользователя, который хочет хороший редактор WYSIWYG.
А что используетет вы?
Какие советы и мнения вы можете дать, основываясь на своём опыте, по инструментам, которые мы рассмотрели? Или у вас есть любимая свободная интегрированная среда разработки, которая не включена в этот список?
Все действия в операционной системе выполняются с помощью программ, поэтому многим новичкам интересно не только использовать чужие программы, а писать свои. Многие хотят внести свой вклад в кодовую базу OpenSource.
Это обзорная статья про программирование под Linux. Мы рассмотрим какие языки используются чаще всего, рассмотрим основные понятия, а также возможности, разберем как написать простейшую программу на одном из самых популярных языков программирования, как ее вручную собрать и запустить.
1. На чем пишут программы?
Исторически сложилось так, что ядро Unix было написано на языке Си. Даже более того, этот язык был создан для написания ядра Unix. Поскольку ядро Linux было основано на ядре Minix (версии Unix), то оно тоже было написано на Си. Поэтому можно сказать, что основной язык программирования для Linux это Си и С++. Такая тенденция сохранялась на протяжении долгого времени.
Мы не будем рассматривать основы Си в этой статье. Си - сложный язык и вам понадобится прочитать как минимум одну книгу и много практиковаться чтобы его освоить. Мы рассмотрим как писать программы на Си в Linux, как их собирать и запускать.
2. Библиотеки
Естественно, что если вам необходимо вывести строку или изображение на экран, то вы не будете напрямую обращаться к видеокарте. Вы просто вызовете несколько функций, которые уже реализованы в системе и передадите им данные, которые нужно вывести на экран. Такие функции размещаются в библиотеках. Фактически, библиотеки - это наборы функций, которые используются другими программами. В них находится такой же код, как и в других программах, разница лишь в том, там необязательно присутствие функции инициализации.
Библиотеки делятся на два типа:
- Статические - они связываются с программой на этапе компиляции, они связываются и после этого все функции библиотеки доступны в программе как родные. Такие библиотеки имеют расширение .a;
- Динамические - такие библиотеки встречаются намного чаще, они загружены в оперативную память, и связываются с программной динамически. Когда программе нужна какая-либо библиотека, она просто вызывает ее по известному адресу в оперативной памяти. Это позволяет экономить память. Расширение этих библиотек - .so, которое походит от Shared Object.
Таким образом, для любой программы на Си нужно подключать библиотеки, и все программы используют какие-либо библиотеки. Также важно заметить, на каком языке бы вы не надумали писать, в конечном итоге все будет сведено к системным библиотекам Си. Например, вы пишите программу на Python, используете стандартные возможности этого языка, а сам интерпретатор уже является программой на Си/С++, которая использует системные библиотеки для доступа к основным возможностям. Поэтому важно понимать как работают программы на Си. Конечно, есть языки, вроде Go, которые сразу переводятся на ассемблер, но там используются принципы те же, что и здесь. К тому же системное программирование linux, в основном, это Си или С++.
3. Процесс сборки программы
Перед тем как мы перейдем к практике и создадим свою первую программу, нужно разобрать как происходит процесс сборки, из каких этапов он состоит.
Каждая серьезная программа состоит из множества файлов, это файлы исходников с расширением .c и заголовочные файлы с расширением .h. Такие заголовочные файлы содержат функции, которые импортируются в программу из библиотек или других файлов .с. Перед тем. как компилятор сможет собрать программу и подготовить ее к работе, ему нужно проверить действительно ли все функции реализованы, доступны ли все статические библиотеки и собрать ее в один файл. Поэтому, первым делом выполняется препроцессор, который собирает исходный файл, выполняются такие инструкции, как include для включения кода заголовочных файлов.
На следующем этапе к работе приступает компилятор, он выполняет все необходимые действия над кодом, разбирает синтаксические конструкции языка, переменные и преобразовывает все это в промежуточный код, а затем в код машинных команд, который мы можем потом посмотреть на языке ассемблера. Программа на этом этапе называется объектный модуль и она еще не готова к выполнению.
Далее к работе приступает компоновщик. Его задача связать объектный модуль со статическими библиотеками и другими объектными модулями. Для каждого исходного файла создается отдельный объектный модуль. Только теперь программа может быть запущена.
А теперь, давайте рассмотрим весь єтот процесс на практике с использованием компилятора GCC.
4. Как собрать программу
Для сборки программ в Linux используется два типа компиляторов, это Gcc и Clang. Пока что GCC более распространен, поэтому рассматривать мы будем именно его. Обычно, программа уже установлена в вашей системе, если же нет, вы можете выполнить для установки в Ubuntu:
sudo apt install gcc
Перед тем как мы перейдем к написанию и сборке программы, давайте рассмотрим синтаксис и опции компилятора:
$ gcc опции исходный_файл_1.с -o готовый_файл
С помощью опций мы говорим утилите что нужно сделать, какие библиотеки использовать, затем просто указываем исходные файлы программы. Давайте рассмотрим опции, которые будем сегодня использовать:
- -o - записать результат в файл для вывода;
- -c - создать объектный файл;
- -x - указать тип файла;
- -l - загрузить статическую библиотеку.
Собственно, это все самое основное, что нам понадобится. Теперь создадим нашу первую программу. Она будет выводить строку текста на экран и чтобы было интереснее, считать квадратный корень из числа 9. Вот исходный код:
int main() printf("losst.ru\n");
printf("Корень: %f\n", sqrt(9));
return 0;
>
Я специально добавил функцию корня чтобы показать как работать с библиотеками. Сначала нужно собрать объектный файл. Перейдите в папку с исходниками и выполните:
gcc -c program.c -o program.o
Это этап компиляции, если в программе нет ошибок, то он пройдет успешно. Если исходных файлов несколько, то такая команда выполняется для каждого из них. Далее выполняем линковку:
gcc -lm program.o -o program
Обратите внимание на опцию -l, с помощью нее мы указываем какие библиотеки нужно подключить, например, здесь мы подключаем библиотеку математических функций, иначе компоновщик просто не найдет где есть та или иная функция. Только после этого можно запустить программу на выполнение:
Конечно, все эти действия могут быть выполнены и с помощью различных графических сред, но выполняя все вручную, вы можете лучше понять как все работает. С помощью команды ldd вы можете посмотреть какие библиотеки использует наша программа:
Это две библиотеки загрузчика, стандартная libc и libm, которую мы подключили.
5. Автоматизация сборки
Когда мы рассматриваем программирование под Linux невозможно не отметить систему автоматизации сборки программ. Дело в том, что когда исходных файлов программы много, вы не будете вручную вводить команды для их компиляции. Можно записать их один раз, а затем использовать везде. Для этого существует утилита make и файлы Makefile. Этот файл состоит из целей и имеет такой синтаксис:
цель: зависимости
команда
В качестве зависимости цели может быть файл или другая цель, основная цель - all, а команда выполняет необходимые действия по сборке. Например, для нашей программы Makefile может выглядеть вот так:
program: program.o
gcc -lm program.o -o program
program.o: program.c
gcc -c program.c -o program.o
Затем вам достаточно выполнить команду make для запуска компиляции, только не забудьте удалить предыдущие временные файлы и собранную программу:
Программа снова готова и вы можете ее запустить.
Выводы
Создание программ Linux очень интересно и увлекательно. Вы сами убедитесь в этом, когда немного освоитесь в этом деле. Сложно охватить все в такой небольшой статье, но мы рассмотрели самые основы и они должны дать вам базу. В этой статье мы рассмотрели основы программирования в linux, если у вас остались вопросы, спрашивайте в комментариях!
Курс программирования на Си под Linux:
Linux быстро развивается и становиться все популярнее, особенно в связи с тем, что сокращается использование Windows, а также множество программистов работают над продвижением Linux, создавая новые программы для настольных компьютеров, которые будут эквивалентны или даже лучше приложений в Windows и Mac OS X.
Для Linux есть множество языков программирования, и более того, каждый год появляются новые. Но не все их используют программисты, ведь для того, чтобы создать надежное, гибкое, эффективное и расширяемое, а главное, безопасное приложение, нужно подобрать правильный язык.
В этой статье мы рассмотрим самые популярные языки программирования для Linux. Рассмотрим те, на которых разработана эта операционная система и те, которые используются для создания приложений. На самом деле список не отсортирован по степени важности, все используемые здесь языки хороши. Все они кроссплатформенные, и вы можете написать на них программу для любой из доступных операционных систем.
Я не преувеличу, если скажу, что этот язык был создан для этой операционной системы. Это уже старый язык. Он создавался в семидесятых годах инженером из Bell Labs Денисом Ритчи специально для написания ядра Unix. Дело в том, что в те времена программы и операционные системы писались на ассемблере и нужно было для каждой архитектуры писать программу отдельно, потому что наборы инструкций отличались. Разработчикам Unix нужен был высокоуровневый язык программирования, на котором они смогли бы написать Unix один раз и собирать его для всех платформ. Таким языком стал Си.
Ядро Linux, основано на Unix, а поэтому тоже написано на Си, также на Си реализованы все модули ядра, драйверы, а также огромное количество системного программного обеспечения. Если вы задавались вопросом, на чем написан Linux то теперь знаете ответ. На Си разработаны множество утилит из набора GNU, X сервер, набор библиотек для работы с графикой GTK и многое другое, некоторые оконные менеджеры. Но для написания новых программ Си используется все реже, ему на замену пришла его объективно ориентированная модификация С++.
Это усовершенствованная версия Cи, появился он ненамного позже си. В 1980 году Бьёрн Страуструп работал над своим исследованием и ему не хватало стандартных возможностей Си, поэтому он придумал к нему пару улучшений. Неожиданно этот язык стал популярен среди его коллег и он уже не мог сам следить за его развитием.
Теперь это один из самых популярных языков программирования. Здесь доступно как объективно ориентированное, так и процедурные стили программирования. Правда, он все же очень сложен для новичков, как и Си. Здесь нужна очень высокая точность при управлении памятью.
На C++ написано много программного обеспечения в Linux, это те же самые утилиты GNU, много пользовательских программ, графические окружения, браузеры. На C++ написан графический фреймворк Qt, который сейчас используется для окружения рабочего стола KDE и большого количества кроссплатформенных программ. Qt - одновременно коммерческий и некоммерческий проект. Если вы разрабатываете свободное ПО, то можете использовать Qt бесплатно, нет - нужно платить за лицензию. Qt намного проще для начинающих чем чистый Си или С++.
Си и С++ наиболее популярные языки программирования для Linux.
3. Python
Python - это интерпретируемый язык высокого уровня общего назначения. Он разработан человеком по имени Гвидо Ван Россум в начале восьмидесятых годов, он работал над языком в свободное время, и ставил цель создать язык для обучения программированию.
Основная идея Python - простота, максимальная скорость разработки, минимум ошибок, минимум неопределенности. Сам синтаксис языка способствует тому чтобы вы писали правильно и не допускали ошибок. Это мгновенно сделало Python одним из самых популярных языков. Было разработано множество библиотек для работы с системными компонентами, реализаций алгоритмов и наборов API для работы с сетевыми сервисами. Сейчас на Python можно написать как веб-сайт, так и полноценное Qt приложение, доказательство первому - множество сайтов, в том числе Яндекс, а второму популярный видеоредактор OpenShot.
К тому же на Python написано бесчисленное количество системных скриптов и утилит для управления Linux. Это утилита apt для установки программного обеспечения в Ubuntu, пакетный менеджер Emerge в Gentoo и еще огромное количество небольших скриптов. Причина тому простота языка. Программист тратит на программу несколько часов, а она отлично работает несколько лет.
4. Perl
Perl - это ещё один скриптовый язык программирования разработанный Ларри Уоллом в 1987 году. У этого языка очень огромные возможности для работы с текстом. Регулярные выражения, которые используются в современных языках программирования, например, PHP, очень часто пошли именно отсюда. Но у Perl есть огромный недостаток, этот язык имеет очень сложный синтаксис и высокий порог вхождения.
Много старого кода в Linux написано на Perl, это различные скрипты сборки ядра, часты пакетного менеджера dpkg, скрипты системы инициализации и многое другое. Из современных программ, написанных на Perl можно отметить скрипт просмотра информации о системе inxi. Как правило, всё новое пишется на Python, но переписывать старое особого смысла нет.
5. Язык командой оболочки
Команды терминала Linux позволяют не только выполнять повседневные операции в интерактивном режиме, но это также полноценный язык программирования с поддержкой самых простых управляющих конструкций. Наиболее распространенная оболочка Bash (Bourne Again Shell) Больше всего скриптов написаны именно на ее синтаксисе, но есть и другие, например, тот же fish, sh, zsh, dash и т д.
Синтаксис управляющих конструкций Bash немного сложный для понимания, но на нем написано много системных скриптов, это в первую очередь все скрипты инициализации демонов в SysVinit, скрипты для обслуживания серверов, резервного копирования, запуска программ и т д. У каждого администратора есть несколько скриптов, написанных на Bash.
6. Другие языки
Большинство программ в Linux написано с использованием языков программирования, перечисленных выше. Они самые популярные, однако существуют и другие, менее используемые. Но тем не менее написанные на них программы могут выполнятся в Linux.
Выводы
Это далеко не все языки программирования linux, которые используются для создания программ в Linux, очень часто для создания скриптов в последнее время начали использовать новые языки, такие как Dart,Vala и другие. Для своих нужд я использую Python и PHP, а вы пишите программы для 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:
Также, можно было скачать архив на сайте, и затем распаковать его в нужную папку, но так будет удобнее. Утилита создаст папку с именем программы, нам нужно сделать ее рабочей:
Настройка 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 есть, и мы можем его использовать:
В таком случае нам необходимо установить требуемую библиотеку. Например, программа предлагает 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. Этот процесс может быть сложным для новичков, но в целом, все возможно, если потратить на решение задачи несколько часов. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео о том, что такое компилятор и интерпретатор:
Добрый день. Этот материал рассчитан на людей, будущих программистов, которые только начинают разбираться в программировании под ОС Linux. Я попробую здесь показать прямое руководство к действию на примере тех простых инструментов, которые использовал некогда сам при изучении Си в процессе знакомства с Linux. На самом деле, с теми или иными поправками, это руководство можно использовать в большинстве дистрибутивов. Руководство однозначно подходит для всех deb-based дистрибутивов.
С установкой ОС, как я полагаю, проблем у Вас уже не возникло. Этому процессу посвящены просто тысячи статей на профильных сайтах.
Итак: у Вас сейчас установлен дистрибутив ОС, как говорится, "из коробки". Перед глазами пособие для разработчика/учебник/просто_хорошая_книга по "Языку программирования Си". И никакой вменяемой, полноценной подробной информации о том, как же собственно откомпилировать и выполнить, написанный в книге, исходный код. Быстрый осмотр тематических ресурсов уже показал Вам, что, необходимо установить компилятор Си, запустить его с нужными параметрами и потом запустить компилированный бинарный код. Примерно с этого момента мы и начнём.
Установка компилятора
Я имею ввиду, что Вы скорее всего (бывший) пользователь ОС Windows и действия в чёрном/синем окошке при помощи клавиатуры оканчивались где-то на команде ping, кажутся неким таинством. Однако отмечу, что всё банально просто и текстовой интерфейс предоставляет намного более гибкие возможности (скорее всего Вы неоднократно Вы слышали это ранее). Приступим:
Я подразумеваю, что с понятием компиляции и о том что такое компилятор Вас уже познакомила правильная книга.
На этом этапе всё будет очень быстро и просто. Открываем терминал и пишем:
(На всякий случай: вставка в gnome-terminal ctrl+shift+v)
Сразу поясню, что текст слева от курсора - это приглашение командного интерпретатора и оно выглядит следующим образом:
Далее я буду указывать только команды интерпретатору без приглашения.
Данная строка "говорит" интерпретатору: "от имени суперпользователя запустить менеджер пакетов для установки пакета gcc".
Система попросит Вас ввести пароль суперпользователя и приступит к установке компилятора.
Если же он уже установлен, то менеджер пакетов apt просто укажет на это примерно следующим образом:
Установка редактора
Обычно с дистрибутивом Ubuntu поставляется весьма интересный текстовой редактор gedit . Однако в других дистрибутивах возможно придётся установить этот редактор:
Создание файла с исходным кодом
Теперь пришло то самое время нашего классического "hello world"! Давайте сделаем это в стиле linux. Просто наберите в консоли:
Более подробно Вы обязательно прочитайте в профильных ресурсах и в документации, я только отмечу, что символ "тильда" возвращает полный путь к домашнему каталогу пользователя ОС. Соответственно будет создан файл в вашем домашнем каталоге с указанным именем.
И далее наш программный код на языке Си в редакторе:
(Стоит отметить, что в редакторе gedit есть подсветка синтаксиса для различных языков программирования. Переключить режимы подсветки можно в нижней части окна редактора.)
Не забываем сохранить изменения нажатием ctrl+s. Обратите внимание, что вопросов об имени файла не последовало, так как имя было уже указано параметром при запуске редактора из командной строки терминала.
Компиляция и запуск
Закрываем окно редактора нажатием Alt+F4 и запустим же то сокровенное ради чего все тут и собрались:
И в ответ только новое приглашение. В отличие от стиля в ОС Windows, когда консоль, жутко подробно по-умолчанию, комментирует выполняемые действия - большинство программ в ОС семейства *nix сообщают только об исключительных ситуациях, ошибках и тому подобных вещах. То есть если "в ответ тишина" - то всё прошло хорошо.
Теперь в домашнем каталоге у нас появился файл a.out - он и есть файл с исполнимым кодом.
Для запуска этого файла на исполнение - назначим ему атрибут: "исполнимый":
и теперь запустим получившееся приложение:
(Для запуска исполнимого файла интерпретатору требуется указать полный путь к файлу. Как в случае с "тильдой" символ "точка" возвращает полный путь к текущему каталогу. В данном конкретном случае правомерно так же запустить через ~/a.out Это не имеет значения здесь, так как файл создан в домашнем каталоге пользователя.)
И мы получаем вывод в терминале:
Для выполнения всех повторных действий: изменение кода и снова компиляция, - Вы можете не вводить все эти команды каждый раз заново, а использовать стрелки вверх и вниз, для быстрого выбора команд из истории. И, кстати, вывод списка истории всех введённых команд можно выполнить командой (на самом деле программой) history .
Минутка автоматизации
Теперь приступим к очень интересному моменту связанному с творчеством в духе *nix. Каждый раз вводить много скучных команд неинтересно, возможно, даже вредно. Мы расширим функционал редактора gedit и доработаем его "напильником" до состояния примитивной среды разработки: запустим gedit и откроем меню параметров,
Главное меню gedit
где на вкладке "Расширения" добавляем "Внешние инструменты"
"Настройки" - "Расширения"
И затем, из того же главного меню gedit выбираем "Управление внешними инструментами".
"Управление внешними инструментами"
Как Вы уже поняли - здесь можно выполнить доработку функциональности текстового редактора. Создадим новый инструмент: "Компиляция и запуск", В качестве вывода используем нижнюю область редактора. Инструмент назначим для файлов C и C++. Назначим клавишу F5 (дело вкуса) на применение инструмента и собственно сам код инструмента в виде скрипта bash:
Разберёмся в том, что тут происходит:
gcc -o a.out $GEDIT_CURRENT_DOCUMENT_NAME - здесь мы запускаем компилятор, где в параметре -o указываем имя выходного файла. Пускай он будет таким же как и по-умолчанию.
$GEDIT_CURRENT_DOCUMENT_NAME - через эту переменную gedit передаёт имя файла.
Дальше Вы уже знаете - назначение атрибута "исполнения", запуск файла и потом:
rm ./a.out - удаление созданного исполнимого файла.
Попробуем инструмент в деле:
Теперь можно продолжать изучать пособие для разработчика/учебник/просто_хорошую_книгу по "Языку программирования Си" на практике.
Заключение
На самом деле в ОС Linux полно возможностей по доработке и использованию различного ПО. Само ПО является максимально гибким. Необязательно использовать предложенные мною средства, скорее методы, разработки.
В дальнейшем Вам обязательно понадобятся более серьёзные средства. А на первое время Вы можете дополнительно посмотреть другие редакторы, вплоть до больших и серьёзных сред разработки. Однако обязательно обратите внимание на редактор vim.
Читайте также: