LibreBay
Статьи про ОС Ubuntu. Языки программирования Си и C++.
Инструменты разработки и многое другое.
понедельник, 5 декабря 2016 г.
Как скомпилировать программу на C/C++ в Ubuntu

Помню, когда я только начинал программировать, у меня возник вопрос: «Как скомпилировать программу на C в Ubuntu?» Для новичков это не легкая задача, как может показаться на первый взгляд.
Мой путь изучения C начался с бестселлера «Брайан Керниган, Деннис Ритчи, Язык программирования C, 2-е издание». Там рассказывается как скомпилировать программу в операционной системе Unix, но этот способ не работает в Linux. Авторы книги выкрутились, написав следующее:
В других системах это процедура будет отличаться. Обратитесь к справочнику или специалисту за подробностями.
Побуду специалистом 🙂 и расскажу в данной статье, как скомпилировать первые программы на C и заодно на C++ в терминале Ubuntu.
Текстовый редактор gedit
Для написания первых программ подойдет обычный, используемый по умолчанию в Ubuntu, текстовый редактор с подсветкой синтаксиса — gedit.
![]() |
| Рис. 1. Запуск текстового редактора. |
Первой программой по традиции является «Hello, World!», выводящее приветствие на экран:
#include int main(int argc, char **argv)
Печатаем или копируем текст программы в gedit и сохраняем в файл Hello.c , например, на рабочий стол. Не самое лучше место для сохранения, но это позволит рассмотреть случай, когда в имени директории содержится пробел.
![]() |
| Рис. 2. Программа hello, World. |
Компиляция программы на C
Теперь запускаем терминал, можно через Dash, а можно с помощью горячих клавиш + + . Здесь в начале установим инструменты сборки, куда входят необходимые компиляторы gcc для языка C и g++ для языка C++:
sudo apt install build-essential
Для установки требуется ввести пароль, при вводе которого может сложиться впечатление, что ничего не происходит, но на самом деле терминал просто в целях безопасности не отображает символы.
Далее в терминале нам необходимо перейти в директорию, куда сохранили файл с текстом программы. Перемещение выполняется командой cd (англ. change directory — изменить каталог). Чтобы воспользоваться командой в начале пишется cd , затем через пробел путь , куда нужно перейти.
Для перехода на рабочий стол, команда будет следующей:
cd ~/Рабочий\ стол
Обратите внимание на символ обратной косой черты \ в имени директории Рабочий стол . Обратная косая экранирует пробел, и сообщает команде cd , что пробел и следующие за ним символы являются частью имени. Символ ~ в начале пути обозначает путь до домашней папки пользователя.
Для просмотра содержимого директории применяется команда ls (сокращение от англ. list).
![]() |
| Рис. 3. Работа в терминале. |
Команда компиляции для программы на C выглядит следующим образом:
gcc -Wall -o hello hello.c
- gcc — компилятор для языка программирования C;
- -Wall — ключ вывода всех предупреждений компилятора;
- -o hello — с помощью ключа -o указывается имя выходного файла;
- hello.c — имя нашего исходного файла, который компилируем.
В завершение запустим hello , вводом имени программы с префиксом ./ :
./hello
Префикс ./ сообщает терминалу о необходимости выполнить программу с заданным именем в текущем каталоге. (Точка — это условное название текущего каталога.)
![]() |
| Рис. 4. Работа в терминале, продолжение. |
Компиляция программы на С++
Программы на C++ компилируются аналогично, как и программы на C. «Hello, World!» на C++ можно написать так:
#include int main(int argc, char **argv)
Сохраняем текст программы в файл под именем hello2.cpp . Таким образом, команда компилирования будет иметь вид:
g++ -Wall -o hello2 hello2.cpp
Для запуска результата вводим в терминале:
./hello2
Заключение
Данный способ позволяет скомпилировать программу лишь из одного файла с исходным кодом. Но этого вполне достаточно, чтобы начать изучение языков программирования C/C++ по книгам или по статьям в интернете.
- Иванов Н. Н. — Программирование в Linux. Самоучитель. — 2-е издание;
- Нейл Метьэ, Ричард Стоунс — Основы программирования в Linux: Пер. с англ. — 4-е издание;
- Колисниченко Д. Н. — Разработка Linux-приложений.
Запуск скомпилированного файла в ubuntu
Всем привет , интересуюсь c++ , вот появился вопрос , скомпилировал я код, появляется у меня скомпилированный файл который надо запустить , но он в формате exe , wine у меня не установлен , можно ли сделать чтобы компилятор создал программу не в .exe формате а в том формате , который я бы смог открыть через ubuntu ? Либо сделать универсальный формат , если есть такой .
Отслеживать
9,066 14 14 серебряных знаков 26 26 бронзовых знаков
задан 11 окт 2016 в 23:40
1,395 19 19 серебряных знаков 49 49 бронзовых знаков
1 Что мешает вам скомпилировать код в gcc под Убунтой для нативной платформы? 2 Что мешает вам в Убунте установить и настроить wine?
12 окт 2016 в 1:46
Я в курсе про Wine , меня интересует можно ли задать правило компилятору , чтобы он создал бинарник не в .exe формате , а в том на который нажав мышкой 2 раза , он откроется как и с .exe на винде
12 окт 2016 в 2:01
Если вы под Убунтой в gcc компилируете exe-файл, то есть исполняемый файл для платформы win-32, если я вас правильно понял, тогда сами понимаете, что это возможно, так как gcc по умолчанию, компилирует под нативную платформу (x86_64). Только, как вам написали в ответе, не всякий код написанный под одну платформу, без учёта кросс-компиляции, возможно сходу собрать под другой.
12 окт 2016 в 2:18
g++ -o hello main.cpp , он не компилирует под ubuntu , такойже обычный .exe файл
12 окт 2016 в 11:20
я вас понял , но вопрос был в том что , как через gcc скомпилировать исполняемый файл для ubuntu так , чтобы он открылся при нажатии на него 2йным щелчком ( также как .exe в винде)
12 окт 2016 в 22:35
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Кривой путь: гуглить про кросс-компиляцию. Например, если Cygwin, то (примерно, давно такой ерундой не занимался):
- Качаем последнюю версию crosstool-ng
- Распаковываем её куда-нибудь в cygwin shell, запускаем ./configure (доустанавливаем то, на что она матерится — bison, flex, cvs, wget, исходники/библиотеку ncurses, и т.д.)
- make , make install , и дальше — по инструкциям отсюда.
Неожиданный путь: поставить Open Watcom для Windows (при установке не забыть поставить галочку у Linux в target platform). Создание нового проекта в нём:

Может прокатить 🙂 Хотя поддержки последних стандартов от него ждать не приходится, но «Hello, world» исправно собирает 🙂
Правильный путь: поставить убунту в виртуалке и собирать в ней.
И в любом случае готовиться к тому, что исходники, без проблем собирающиеся под Windows, придётся дорабатывать напильником. После чего может возникнуть желание пойти по совсем правильному пути: работать под Linux, а Windows держать в виртуалке 🙂
Либо сделать универсальный формат , если есть такой .
Как скомпилировать и запустить программы на C, C++ в Linux

В этом кратком руководстве объясняется, как компилировать и запускать программы на C / C ++ в операционной системе GNU / Linux.
Если вы студент или новый пользователь Linux, пришедший с платформы Microsoft, то вам может быть интересно, как запускать программы на C или C ++ в дистрибутиве Linux.
Потому что компиляция и запуск кода на платформах Linux немного отличается от Windows. Давайте начнем, не так ли?
Настройка среды разработки
Как вы, возможно, уже знаете, нам нужно установить необходимые инструменты и компиляторы для запуска кода, верно?
Средства разработки включают в себя все необходимые приложения, такие как компиляторы GNU GCC C / C ++, make, отладчики, справочные страницы и другие компоненты, которые необходимы для компиляции и сборки нового программного обеспечения, пакетов и т. д.
После установки необходимых инструментов разработки проверьте их с помощью одной из следующих команд:
$ whereis gcc
$ which gcc
$ gcc -v
Эти команды отобразят путь установки и версию компилятора gcc.

Компиляция и запуск программ на C, C ++ на Linux
Во-первых, давайте посмотрим, как скомпилировать и запустить простую программу, написанную на языке Си.
Напишите свой код / программу в вашем любимом редакторе CLI / GUI.
Я собираюсь написать свою программу на C, используя редактор nano.
$ nano itisgood.c
Примечание: вам нужно использовать расширение .c для программ на C или .cpp для программ на C ++.
Скопируйте / вставьте следующий код:
#include int main()
Нажмите Ctrl + O и Ctrl + X, чтобы сохранить и выйти из файла.
Чтобы скомпилировать программу, запустите:
$ gcc itisgood.c -o itisgood
$ cc itisgood.c -o itisgood
Если в вашем коде / программе есть какие-либо синтаксические или семантические ошибки, они будут отображены.
Вы должны исправить их, чтобы продолжить.
Если ошибки нет, компилятор успешно сгенерирует исполняемый файл с именем itisgood в текущем рабочем каталоге.
Наконец, выполните программу, используя команду:
$ ./itisgood
Вы увидите вывод, как показано ниже:
Welcome To itisgood.ru!
Чтобы скомпилировать несколько исходных файлов (например, source1 и source2) в исполняемый файл, запустите:
$ gcc source1.c source2.c -o executable
Чтобы разрешить предупреждения, отладьте символы в выводе:
$ gcc source.c -Wall -Og -o executable
Чтобы скомпилировать исходный код в инструкции ассемблера:
$ gcc -S source.c
Чтобы скомпилировать исходный код без ссылок:
$ gcc -c source.c
Приведенная выше команда создаст исполняемый файл с именем source.o.
Если ваша программа содержит математические функции:
$ gcc source.c -o executable -lm
Для более подробной информации обратитесь к справочным страницам.
$ man gcc
Компиляция и запуск программ C ++
Напишите свою программу на C ++ в любом редакторе по вашему выбору и сохраните ее с расширением .cpp.
Вот простая программа на C ++.
$ cat itisgood.cpp
#include int main()
Чтобы скомпилировать эту программу C ++ в Linux, просто запустите:
$ g++ itisgood.cpp -o itsigood
Если ошибок не было, вы можете запустить эту программу C ++ под Linux, используя команду:
$ ./itisgood
Вы увидите вывод, как показано ниже:
Welcome To itisgood.ru!
В качестве альтернативы, мы можем скомпилировать вышеуказанную программу на C ++, используя команду «make», как показано ниже.
$ make itisgood
Я не использовал расширение .cpp в приведенной выше команде для компиляции программы.
Нет необходимости использовать расширение для компиляции программ на C ++ с помощью команды make.
$ ./itisgood Welcome To itisgood.ru!
Для более подробной информации обратитесь к справочным страницам.
$ man g++
Надеюсь все было достаточно просто и понятно!
itisgood
previous post
Как исправить ошибку «repository is not valid yet»
Как остановить запросы с пустым или неправильным заголовком хоста
You may also like
Как изменить порт Angular
Поиск содержимого между двумя совпадающими шаблонами на.
Что означает “$
☸️ Установка легкого Openshift с помощью Microshift
Полезные команды Documentum
Как запустить службы systemd при загрузке системы
Как искать содержимое после совпадения с шаблоном.
Как отправить большое видео по электронной почте
Как переименовать контейнер LXD
Как пополнить Steam из России в 2024 году
Leave a Comment Cancel Reply
• Свежие записи
- Узнаем, как долго работает контейнер Docker
- Как изменить порт Angular
- ☸️ Автоматизация приостановки Kubernetes CronJobs с помощью find и sed
- Поиск содержимого между двумя совпадающими шаблонами на Linux
- Что такое QoS?
- Что означает “$
• Категории
• Теги
• itsecforu.ru

• Страны посетителей
IT is good
Этот пример относится к заданиям cron в Kubernetes, но его можно применить к чему угодно! В Kubernetes вы можете установить suspend: true или…
Grep, мощная утилита командной строки в системах Unix и Linux, известна для поиска и фильтрации текста с помощью регулярных выражений. В этой статье…
QoS, или Quality of Service, используется для обозначения способов, с помощью которых ваш маршрутизатор может перераспределять (или отбрасывать) определенные типы трафика в вашей…
В Makefile я часто вижу “$
1. Обзор Функция многоступенчатых сборок в Docker позволяет разработчикам создавать последовательность сборок, каждая из которых имеет свой собственный набор инструкций. Это помогает оптимизировать…
Как запустить скомпилированную программу в Linux ( Ubuntu ) без терминала?
Пытаюсь начать программировать в Linux, и сразу вопрос проблема. В Windows написал код, скомпилировал, получил на выходе ЕХЕшник. Двойной щелчок по программе, она запустилась. В Linux написал простую программу на С в блокноте ( для начала ), скомпилировал gcc prog.c -o prog, получил на выходе файл. Но Я ее могу запустить только через терминал командой ./prog .А как запускать программы по двойному щелчку мыши? А если вы еще дадите простой код с кнопкой и обработкой события по нажатию этой кнопки или любую другую полезную информацию по этой теме ( кроссплатформенность например ), Я вам искренне буду благодарен. Хочется дальше развиваться.
- Вопрос задан более трёх лет назад
- 2905 просмотров
2 комментария
Простой 2 комментария
Попробуй sudo chmod +x *Название файла*.
Эта команда разрешит исполнение файла.
Попробуй sudo chmod +x *Название файла*.
Из вопроса:
Я ее могу запустить только через терминал командой ./prog
Решения вопроса 1

Алексей Черемисин @leahch Куратор тега Linux
Я мастер на все руки, я козлик Элек Мэк 🙂
В линуксе, как и в виндовс, как и во всех остальных операционных системах (мне знакомых), есть два типа программ: консольные и с графическим интерфейсом.
Консольные программы требуют наличия какого-то терминала или консоли, соответсвенно их хоть и можно запустить по двойному щелчку, не всегда результат их работы будет виден, если дополнительно не указать в каком окружении их запускать.
Про программы с графическим интерфейсом все просто — они сразу пытаются открыть графическое окно. Но сама программа будет немного сложнее.
Так, Вы сделали и скомпилировали консольную программу. В этом же терминале можно ее и запустить.
Либо сделать «лаунчер» типа
xterm ./prog
Как сделать «лаунчер», зависит от вашего графического окружения, но обычно можно просто сделать desktop-файл, его практически все в линуксе понимают.
Просто создайте текстовый файл prog.Desktop со следующим содержимым (Exec — полный путь до вашей программы, Icon — путь до иконки, но можно без нее)
[Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application Terminal=true Exec=/path/to/executable Name=Name of Application Icon=/path/to/icon
ЗЫ. Да, забыл напомнить, сделайте в вашей программе выход по ожиданию нажатия на клавишу, иначе можно ничего и не рассмотреть!



