Linux cc что это

Обновлено: 03.07.2024

Этот раздел касается только GNU-компилятора для C и C++, так как он поставляется вместе с системой FreeBSD. Он может быть вызван командами cc или gcc. Подробности по генерации программ с помощью интерпретатора зависят от конкретного интерпретатора и обычно хорошо описываются в документации и встроенной системе помощи интерпретатора.

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

Предварительная обработка исходного кода для удаления комментариев и выполнения других хитростей, наподобие раскрытия макросов в языке C.

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

Преобразование исходного кода в код на языке ассемблера--он очень близок к машинному коду, но все еще понятен человеку. Определенно. [1]

Преобразование ассемблерного кода в машинный код--да, мы имеем в виду биты и байты, здесь только нули и единицы.

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

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

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

Наконец, запись выполнимого файла в файловую систему.

Термин компиляция часто используется для обозначения действий на шагах от 1 до 4--остальные шаги называют компоновкой. Иногда шаг 1 называют препроцессорной обработкой, а шаги 3-4 ассемблированием.

К счастью, почти все эти детали скрыты от вас, cc как конечная программа управляет за вас вызовом всех этих программ с правильными аргументами; простой вызов

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

Заметьте, что синтаксическая проверка--это именно проверка синтаксиса. При этом не выполняется проверка на наличие сделанных вами логических ошибок, типа вхождения в бесконечный цикл или использования пузырьковой сортировки там, где вы хотели использовать двоичную. [2]

Имеется огромное количество параметров для cc, все они описаны на справочной странице. Вот несколько из самых важных, с примерами их использования.

Имя выходного файла. Если вы не используете этот параметр, cc сгенерирует выполнимый файл с именем a.out. [3]

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

В результате будет сгенерирован объектный файл (не выполнимый файл) с именем foobar.o. Он может быть скомпонован с другими объектными файлами для получения выполнимого файла.

Создать отладочную версию выполнимого файла. Этот параметр указывает компилятору поместить в выполнимый файл информацию о том, какая строка какого файла с исходным текстом какому вызову функции соответствует. Отладчик может использовать эту информацию для вывода исходного кода при пошаговом выполнении программы, что очень полезно; минусом является то, что вся эта дополнительная информация делает программу гораздо большей. Обычно вы компилируете с параметром -g при работе над программой, а затем, когда убедитесь в работоспособности программы, компилируете "окончательную версию" без параметра -g.

При этом будет сгенерирована отладочная версия программы. [4]

Создать оптимизированную версию выполнимого файла. Компилятор прибегает к различным ухищрениям для того, чтобы сгенерировать выполнимый файл, выполняющийся быстрее, чем обычно. После опции -O вы можете добавить число, указывающее качество оптимизации, но использование этого не защищено от ошибок оптимизации компилятора. Например, известно, что версия компилятора cc, поставляемая с FreeBSD версии 2.1.0, при некоторых условиях генерирует неверный код при использовании опции -O2.

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

По этой команде будет создана оптимизированная версия программы foobar.

Следующие три флага заставят cc проверять ваш код на соответствие известному международному стандарту, часто называемому стандартом ANSI , хотя, строго говоря, это стандарт ISO .

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

Выключить большинство, если не все, не- ANSI расширений языка C, имеющиеся в cc. Несмотря на название, этот параметр не гарантирует, что ваш код будет строго соответствовать стандарту.

Выключить все расширения C, имеющиеся в компиляторе cc, не соответствующие стандарту ANSI .

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

Вообще говоря, вы должны стараться писать как можно более переносимый код, иначе вам позже, может быть, придется полностью переписывать программу, чтобы заставить ее работать где-то еще--и кто знает, что вы будете использовать через несколько лет?

По этой команде после проверки на соответствие стандарту файла foobar.c будет сгенерирован выполнимый файл foobar.

Задает библиотеку функций, которая будет использоваться на этапе компоновки.

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

При этом если библиотека называется libsomething.a, вы передаете программе cc аргумент -lsomething. Например, математическая библиотека называется libm.a, так что вы передаете программе cc аргумент -lm. Известной "хитростью" при работе с математической библиотекой является то, что в командной строке она должна быть указана в качестве последней библиотеки.

По этой команде библиотека математических функций будет скомпонована с foobar.

Если вы компилируете код на языке C++, вам нужно добавить параметр -lg++, или -lstdc++ при использовании FreeBSD 2.2 и выше, к аргументам командной строки для компоновки библиотеки функций C++. Либо вы можете запустить вместо cc компилятор c++, который сделает это за вас. Во FreeBSD c++ может быть вызван как g++.

В каждом из этих вариантов из файла foobar.cc с исходным кодом C++ будет создан выполнимый файл foobar. Заметьте, что в Unix-системах файлы с исходным кодом C++ традиционно оканчиваются на .C, .cxx или .cc, в отличие от стиля MS-DOS .cpp (который уже использовался для чего-то еще). gcc использует это для определения того, какой компилятор использовать; однако это ограничение больше не имеет силы, так что вы можете безнаказанно называть ваши файлы с кодом C++ .cpp!

2.4.1. Часто возникающие вопросы и проблемы с cc

2.4.1.1. Я пытаюсь написать программу, которая использует функцию sin() и получаю такую ошибку. Что она означает?

При использовании таких математических функций, как sin(), вам нужно указать компилятору cc на компоновку с математической библиотекой, вот так:

2.4.1.2. Все замечательно, чтобы попрактиковаться в использовании параметра -lm, я написал вот такую простую программу. Все, что она делает, заключается в возведении числа 2.1 в шестую степень.

и я компилирую ее вот так:

как вы и сказали, но при ее запуске получаю вот что:

Это неправильный результат! Что происходит?

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

Объявления математических функций находятся в файле math.h. Если вы включаете этот файл, то компилятор сможет найти объявление и перестанет вытворять странные вещи с вашими расчетами!

После компиляции таким же образом, как и раньше, запустите программу снова:

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

2.4.1.4. Я компилировал файл с именем foobar.c, но не могу найти выполнимый файл с именем foobar. Куда он подевался?

Запомните, что cc будет называть выполнимый файл a.out, если вы не зададите имя явно. Воспользуйтесь опцией -o filename:

В отличие от MS-DOS, Unix не просматривает текущий каталог, когда пытается найти выполнимый файл, который вы хотите запустить, если вы явно его укажете. Либо введите команду ./foobar, которая означает, что "нужно запустить файл с именем foobar, располагающийся в текущем каталоге" , или измените вашу переменную окружения PATH, чтобы она выглядела примерно как

Точка в конце означает "посмотреть в текущем каталоге, если в других ничего не найдено" .

2.4.1.6. Я назвал мой выполнимый файл test, но при попытке его запустить ничего не происходит. В чем дело?

В большинстве Unix-систем в каталоге /usr/bin присутствует программа с именем test и до того, как оболочка доберется до текущего каталога, она выбирает именно ее. Наберите:

либо выберите более подходящее для вашей программы имя!

Фраза core dump (сброс дампа) своим происхождением обязана ранним дням Unix, когда в качестве устройств для хранения данных в машинах использовалась память на магнитных сердечниках (core). В общем, если в программе при некоторых условиях возникала ошибка, система записывала содержимое памяти на магнитных сердечниках на диск в файл с именем core, в котором затем для обнаружения причины происшедшего мог покопаться программист.

2.4.1.8. Очаровательно, но что я теперь должен делать?

Для анализа дампа воспользуйтесь программой gdb (посмотрите Section 2.6).

В основном это значит, что ваша программа пыталась выполнить в памяти какую-то недопустимую операцию; Unix построен так, что защищает операционную систему и другие программы от некорректно работающих программ.

Часто встречаемыми причинами этого являются:

Попытка записи в область памяти, на которую ссылается указатель со значением NULL , например

Использование указателя, Using a pointer that hasn't been initialised, eg

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

Попытка выхода за границы массива, к примеру

Попытка произвести запись в область памяти, доступную только в режиме чтения, например,

Компиляторы Unix часто размещают строковые выражения типа "My string" в областях памяти, доступных только для чтения.

Выполнение сомнительных операций с функциями malloc() и free(), например

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

Нет, к счастью, нет (если, конечно, у вас действительно нет проблем с оборудованием. ). Обычно это является еще одним способом сказать, что вы обращаетесь к памяти неправильным образом.

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

Да, просто, перейдя на другую консоль или xterm, выдайте команду

для определения идентификатора процесса, соответствующего вашей программе, и выполните команду

где pid тем самым идентификатором процесса, который вы нашли.

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

Notes

Строго говоря, cc на этом шаге преобразует исходный код в собственный машинно-независимый p-код, а не в язык ассемблера.

Если вы не знаете, то двоичная сортировка эффективна, а пузырьковая неэффективна.

В Unix-подобных операционных системах cc команда запускает системный компилятор C.

Этот документ охватывает версию GNU / Linux cc, который является символической ссылкой на gcc, коллекция компилятора GNU.

  • Описание
  • Синтаксис
  • Примеры
  • Связанные команды
  • Справка по командам Linux

Описание

Существенная обязанность компилятора - переводить компьютерную программу с одного языка на другой, и обычно он делает это более одного раза за одну компиляцию.

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

Как правило, компилятор выполняет с вашим кодом следующие функции:

Синтаксис

cc [ параметры ]

Параметры

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

-c

Просто скомпилируйте код; не пытайтесь связать исходные файлы. Будут созданы объектные файлы, которые при необходимости можно связать позже на отдельном шаге для создания исполняемого файла.

-O[уровень]

Создайте оптимизированный исполняемый файл. Компилятор проанализирует ваш код и, если он знает какие-либо хитрые приемы для повышения производительности, реализует их в байтовом коде. В уровень - необязательное число, буква или слово, которое может указать, какой объем оптимизации следует выполнить. Например, коллекция компилятора GNU позволяет использовать параметры -O0 указать минимальную оптимизацию (по умолчанию), -O1 и -O2 для промежуточных уровней оптимизации, и -O3 для максимальной оптимизации. -Быстро может использоваться как псевдоним для -O3, и -Ог выполнит оптимизацию, совместимую с последующим анализом отладчиком.

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

-Стена

-анси

Отключите большинство (но не все) несовместимых с ANSI C функций, предоставляемых cc. Включите эту опцию, чтобы соответствовать строгим стандартам ANSI. Это обеспечит полную переносимость вашего кода для компиляции в любой другой системе.

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

-Dимя[=значение]

Определяет макрос во время компиляции путем присвоения указанного значение к символу имя. Когда препроцессор C запущен, он расширит все экземпляры имя к тексту значение.

реж

-Lреж

Добавить реж в список каталогов, в которых компилятор будет искать связанные библиотеки. Эта опция передается в ld и / usr / lib.

-lбиблиотека

При связывании эта опция добавляет указанную библиотеку в список библиотек для связывания. Например, если вы используете функции из математической библиотеки C (libm), вы могли бы связать его во время компиляции, используя опцию -lm.

Помните о взаимозависимостях ваших библиотек и убедитесь, что вы связали их в правильном порядке в командной строке; сначала укажите любые библиотеки, от которых будут зависеть другие библиотеки. Например, "-lGL -lGLU"будет искать libGL сначала а потом libGLU. libGLU зависит от libGL, поэтому, если вы измените порядок этих -l варианты, программа не скомпилируется.

-M

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

модель

имя файла

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

-S

Создает исходный код ассемблера, но останавливается перед фактической сборкой.

-Uимя

"Отменить определение" любого ранее определенного макроса с именем имя, либо в исходном коде, либо указанный в командной строке с помощью -D.

Переменные среды

Следующие переменные среды влияют на процесс компиляции:

LANG
LC_CTYPE
LC_MESSAGES
LC_ALL

Эти переменные среды управляют тем, как компилятор использует информацию о локализации для работы с различными национальными соглашениями. Общее значение - "en_GB.UTF-8"для английского языка в кодировке UTF-8. Если установлено, LC_ALL переменная переопределяет все остальные настройки локали.

Чтобы просмотреть текущие настройки локали, используйте регион команда.

TMPDIR

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

COMPILER_PATH

Список каталогов, разделенных двоеточиями, очень похожий на ПУТЬ переменная. Компилятор будет искать в этом списке каталогов подпрограммы, если не сможет найти их, используя значение GCC_EXEC_PREFIX.

LIBRARY_PATH

Список каталогов, разделенных двоеточиями, как и ПУТЬ. При компоновке компилятор будет искать в этом списке каталогов связанные библиотеки и специальные файлы компоновщика, которые он не может найти, используя значение GCC_EXEC_PREFIX.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH

Каждая из этих переменных может содержать список каталогов, разделенных специальным символом, как и ПУТЬ, в котором компилятор будет искать файлы заголовков. Особый персонаж, PATH_SEPARATOR, зависит от цели и определяется во время сборки. Для большинства целей Linux PATH_SEPARATOR это двоеточие.

CPATH задает список каталогов для поиска, как если бы он был задан -Я вариант, но после любых путей, указанных с -Я вариант.

C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, и OBJC_INCLUDE_PATH применяется только при предварительной обработке указанного языка. Каждый указывает список каталогов для поиска, как если бы он был указан с помощью -система, но после любых путей, заданных с -система параметры в командной строке.

Во всех этих переменных пустой элемент указывает компилятору выполнить поиск в текущем рабочем каталоге. Пустые элементы могут появляться в начале или в конце пути. Например, если значение CPATH является : / специальный / включить, имеющий тот же эффект, что и "-Я. -I / special / include’.

DEPENDENCIES_OUTPUT

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

Значение DEPENDENCIES_OUTPUT может быть просто именем файла, и в этом случае правила Make записываются в этот файл, угадывая целевое имя из имени исходного файла. Или значение может иметь форму "файловая цель", и в этом случае правила записываются в файл файл с помощью цель как целевое имя.

Примеры

Скомпилируйте файл myfile.c. Вывод будет записан в исполняемый файл а. выход.

cc myfile.c -o myexe

Скомпилируйте файл myfile.c и назовите скомпилированный исполняемый выходной файл myexe.

cc myfile.c -Wall -o myexe

Скомпилируйте файл myfile.c и вывести скомпилированный исполняемый файл как myexe, отображая предупреждения во время компиляции, если они возникают.

cc myfile.c -Wall -lX11 -o myexe

Компилировать myfile.c к исполняемому файлу myexe, связывая libX11 библиотека и выдача любых применимых предупреждений во время компиляции.

cc myfile.c -Wall -ansi -lX11 -o myexe

Компилировать myfile.c к исполняемому файлу myexe, связывая libX11 библиотека, строго соблюдая стандарты ANSI C и выдавая предупреждения, если применимо.

Связанные команды

ld - Редактор ссылок для объектных файлов.
ctags - Создание файлов тегов для исходного кода.

Это краткое руководство объясняет, как компилировать и запускать программы на Си/Си++ в операционной системе GNU/Linux.

Если вы студент или новый пользователь Linux, который переходит с платформы Microsoft, то вам может быть интересно, как запускать программы на Си или Си++ в дистрибутиве Linux. Мы должны понимать, что компиляция и запуск кода на платформах Linux немного отличается от Windows.

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

Как вы, наверное, уже понимаете, для запуска кода нужно установить необходимые инструменты и компиляторы для работы. Ниже мы опишем как установить все инструменты разработки в Linux.

Для работы и тестирования у нас должен быть сервер с Linux. Лучший вариант - это VPS. В зависимости от географии проекта обычно выбирают две страны для серверов - VPS США и VPS России.

В этом кратком руководстве мы обсудим, как установить средства разработки в такие дистрибутивы Linux, как Arch Linux, CentOS, RHEL, Fedora, Debian, Ubuntu, openSUSE и др.

Эти средства разработки включают в себя все необходимые приложения, такие как компиляторы GNU GCC C/C++, make, отладчики, man-страницы и другие, которые необходимы для компиляции и сборки нового программного обеспечения и пакетов.

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

Установка в Arch Linux

Для установки средств разработки в Arch Linux и его дистрибутивов, таких как Antergos, Manjaro Linux, просто запустите:

Вышеуказанная команда установит следующие пакеты в ваши системы на базе Arch:

  1. autoconf
  2. automake
  3. binutils
  4. bison
  5. fakeroot
  6. file
  7. findutils
  8. flex
  9. gawk
  10. gcc
  11. gettext
  12. grep
  13. groff
  14. gzip
  15. libtool
  16. m4
  17. make
  18. pacman
  19. patch
  20. pkg-config
  21. sed
  22. sudo
  23. texinfo
  24. util-linux
  25. which

Просто нажми ENTER, чтобы установить их все.


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

Установка средств разработки в RHEL, CentOS

Для установки средств разработки в Fedora, RHEL и его клонах, таких как CentOS, Scientific Linux, выполните следующие команды как пользователь root:

Вышеуказанная команда установит все необходимые инструменты разработчика, например:

  1. autoconf
  2. automake
  3. bison
  4. byacc
  5. cscope
  6. ctags
  7. diffstat
  8. doxygen
  9. elfutils
  10. flex
  11. gcc/gcc-c++/gcc-gfortran
  12. git
  13. indent
  14. intltool
  15. libtool
  16. patch
  17. patchutils
  18. rcs
  19. subversion
  20. swig


Установка инструментов разработки в Debian, Ubuntu и дистрибутивы

Для установки необходимых инструментов разработчика в системах на базе DEB, запустите:

Эта команда предоставит все необходимые пакеты для настройки среды разработки в Debian, Ubuntu и его дистрибутивов.

  1. binutils
  2. cpp
  3. gcc-5-locales
  4. g++-multilib
  5. g++-5-multilib
  6. gcc-5-doc
  7. gcc-multilib
  8. autoconf
  9. automake
  10. libtool
  11. flex
  12. bison
  13. gdb
  14. gcc-doc
  15. gcc-5-multilib
  16. and many.


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

Скрипт Mangi

Если Вам не нравится метод установки средств разработки выше, есть также скрипт под названием "сценарий манги" (mangi), доступный для легкой настройки среды разработки в DEB-системах, таких как Ubuntu, Linux Mint и других производных Ubuntu.

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

Этот скрипт установит следующие среды разработки и инструменты на вашу систему Linux:

  1. Node.js
  2. NVM
  3. NPM
  4. Nodemon
  5. MongoDB
  6. Forever
  7. git
  8. grunt
  9. bower
  10. vim
  11. Maven
  12. Loopback
  13. curl
  14. python
  15. jre/jdk
  16. gimp
  17. zip unzip and rar tools
  18. filezilla
  19. tlp
  20. erlang
  21. xpad sticky notes
  22. cpu checker
  23. kvm acceleration
  24. Calibre Ebook Reader (I often use it to read programming books
  25. Dict – Ubuntu Dictionary Database and Client (CLI based)

Сначала установите следующее:

Скачайте скрипт манги, используя команду:

Извлеките загруженный архив:

Вышеуказанная команда распакует zip-файл в папку под названием mangi-script-master в вашей текущей рабочей директории. Перейдите в каталог и сделайте скрипт исполняемым, используя следующие команды:

Наконец, запустите скрипт с помощью команды:


Пожалуйста, имейте в виду, что этот скрипт не полностью автоматизирован. Вам необходимо ответить на ряд вопросов "Да/Нет" для установки всех инструментов разработки.

Установка инструментов разработки в openSUSE/SUSE

Для настройки среды разработки в openSUSE и SUSE enterprise выполните следующие команды от имени root пользователя:

Проверка установки

Теперь проверим, были ли установлены средства разработки или нет. Для этого запустите:


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

Настройка среды разработки

Скрипт под названием 'mangi' поможет вам настроить полное окружение в системах на базе Ubuntu.

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

Эти команды покажут путь установки и версию компилятора gcc.


Компиляция и запуск программ C, C++

Сначала посмотрим, как скомпилировать и запустить простую программу, написанную на языке Си.

Компиляция и запуск программ на C

Напишите свой код/программу в любимом редакторе CLI/GUI.

Я собираюсь написать свою программу на Си с помощью редактора nano.

Примечание. Вам необходимо использовать расширение .c для программ на Си или .cpp для программ на Си++.

Скопируйте/вставьте следующий код:


Нажмите Ctrl+O и Ctrl+X для сохранения и выхода из файла.

Чтобы скомпилировать программу, запустите:

Наконец, запустите программу с помощью команды:

Вы увидите вывод, как показано ниже:

Чтобы скомпилировать несколько исходных файлов (например, source1 и source2) в исполняемый файл, запустите:

Для разрешения предупреждений, необходима отладка символов на выходе:

Скомпилировать исходный код в инструкции ассемблера:

Скомпилировать исходный код без связывания:

Вышеприведенная команда создаст исполняемый файл под названием source.o.

Если ваша программа содержит математические функции:

За более подробной информацией обращайтесь к man-страницам (страницы руководства).

Компиляция и запуск программ на C++

Напишите вашу C++ программу в любом редакторе по вашему выбору и сохраните ее с расширением .cpp.

Пример простой C++ программы:

Чтобы скомпилировать эту программу на C++ в Linux, просто запустите:

Если ошибок не было, то можно запустить эту Си++ программу под Linux с помощью команды:

В качестве альтернативы мы можем скомпилировать приведенную выше программу на C++, используя команду "make", как показано ниже.

Вы заметили? Я не использовал расширение .cpp в вышеприведенной команде для компиляции программы. Нет необходимости использовать расширение для компиляции Си++ программ с помощью команды make.

Ниже изложена процедура установки GNU CC в системе Unix. См. раздел [Установка на VMS], для VMS систем. В этом разделе мы считаем, что вы компилируете в том же каталоге, который содержит исходные фай- лы; см. раздел [Другие Директории], чтобы выяснить, как компилировать в отдельном каталоге в системе Unix.

  1. Если вы предварительно построили GNU CC в том же самом каталоге для другой целевой машины, сделайте `make distclean', чтобы удалить все файлы, которые могут быть неправильными. Один из удаляемых файлов - `Makefile'; если `make distclean' говорит, что `Makefile' не существует, это, вероятно, означяет, что каталог уже правильно очищен.
  2. В системе System V release 4, удостоверьтесь, что `/usr/bin' предшествует `/usr/ucb' в PATH. Команда 'cc' в `/usr/ucb' использует библиотеки, которые содержат ошибки.
  3. Укажите хост, формирующую и целевую машинные конфигурации. Вы делаете это при выполнении файла `configure'. "Формирующая" машина - система которую вы используете, "хост" машина - система, где вы хотите выполнять получающийся в результате компилятор (обычно, формирующая машина), "целевая" машина - система, для которой вы хотите, чтобы компилятор генерировал код. Если вы строите компилятор, чтобы генерировать код для машины, на которой выполняется компилятор (родной компилятор), вы, обычно, не должны указывать никаких операндов configure; он попробует определить тип машины, на которой вы работаете, и использовать ее в качестве формирующей, главной и целевой машин. Так что вы не должны указывать конфигурацию, когда строится родной компилятор, разве что configure не может определить вашу конфигурацию или определяет ее неправильно. В этих случаях, укажите имя конфигурации формирующей машины с опцией '--build', главная машина и адресат будут по умолчанию такими же как и формирующая машина. (Если вы строите кросскомпилятор, см. раздел [Построение и Установка Кросскомпилятора].) Пример:

Имя конфигурации может быть каноническим или более или менее сокращенным. Каноническиое имя конфигурации имеет три части, разделяемые черточкой. Оно выглядит следующим образом: `процессор-компания-система'. (Три части могут сами содержать черточки, `configure' может выяснить, какие черточки служат каким целям.) Например, `m68k-sun-sunos4.1' определяет Sun 3. Вы можете также заменять части конфигурации на прозвища или псевдонимы. Например, `sun3' заменяет `m68k-sun', так `sun3-sunos4.1' - другой способ указать Sun 3. Вы можете также использовать просто `sun3-sunos', так как версия SunOS считается по умолчанию равной четырем. `sun3-bsd' также работает, так как `configure' знает, что единственный вариант BSD на Sun 3 - SunOS. Вы можете указать номер версии после любого из типов систем и после некоторых из типов процессоров. В большинстве случаев, версия неуместна и игнорируется. Так что вы могли к тому же указать версию, если вы знаете ее. См. раздел [Конфигурации], за списком поддерживаемых имен конфи- гураций и примечаний относительно многих из них. Вы должны посмотреть примечания в этом разделе перед выполнением любых дальнейших действий по установке GNU CC. Имеются четыре дополнительные опции, которые вы можете указать независимо, чтобы определить варианты аппаратных и программных конфигураций. Это - `--with-gnu-as', `--with-gnu-ld', `--with-stabs' и `--nfp'. '--with-gnu-as'

Если вы будете использовать GNU CC с ассемблером GNU (GAS), вы должны указать это с помощью `--c-gnu-as' опцией когда вы запускаете `configure'.

Использование этой опции не устанавливает GAS. Она только изменяет вывод GNU CC, чтобы он работал с GAS. Построение и установка GAS - это ваша задача.

Наоборот, если вы не хотите использовать GAS и не определяете `--with-gnu-as' при построении GNU CC, это ваша задача - удостовериться, что GAS не установлен. GNU CC ищет программу с именем as в различных каталогах; если программа, которую он находит - GAS, тогда он запускает GAS. Если вы не уверены, где GNU CC находит ассемблер, который он использует, попробуйте указать `-v', когда вы его запускаете.

Системы где важно, используете ли вы GAS: `hppa1.0-любая-любая', `hppa1.1-любая-любая', `i386-любая-sysv', `i386-любая-isc', `i860-любая-bsd', `m68k-bull-sysv', `m68k-hp-hpux', `m68k-sony-bsd', `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv', `ANY-lynx-lynxos' и `mips-любая'). В любой другой системе `--with-gnu-as' не имеет никакого эффекта.

В системах перечисленных выше (кроме HP-PA, ISC на 386 и `mips-sgi-irix5.*'), если вы используете GAS, вы должны, также, использовать GNU линкер (и указывать `--with-gnu-ld').

Укажите опцию `--with-gnu-ld', если вы планируете использовать GNU линкер с GNU CC.

Эта опция не заставляет устанавливать GNU линкер; она только изменяет поведение GNU CC, чтобы он работал с GNU линкером. В частности, она запрещает установку `collect2' - программы, которая в противном случае служит в качестве внешнего интерфейса для линкера системы в большинстве конфигураций.

В системах, основанных на MIPS, и в системах на Alpha вы должны определять, должен ли GNU CC создавать нормальный отладочный формат ECOFF или использовать stab'ы BSD-стиля, передаваемые через символьную таблицу ECOFF. Нормальный отладочный формат ECOFF не может полностью обрабатывать языки, отличные от C. Формат BSD stab'ов может обрабатывать другие языки, но он работает только с отладчиком GNU - GDB.

Обычно, GNU CC использует отладочный формат ECOFF по умолчанию; если вы предпочитаете BSD stab'ы, укажите `--with-stabs', когда вы конфигурируете GNU CC.

Вне зависимости от того, какое умолчание вы выбираете, когда конфигурируете GNU CC, пользователь может использовать опции `-gcoff' и `-gstabs+', чтобы явно указывать отладочный формат для конкретной компиляции.

`--with-stabs' имеет значение также в системе ISC на 386, если используется '--with-gas'. Она включает применение отладочной информация stab'ов, встроенной в вывод COFF'а. Этот вид отладочной информации хорошо поддерживает C++; обычная отладочная информация COFF'а не делает этого.

`--with-stabs' имеет значение также в системах на 386, исполняющих SVR4. Она включает применение отладочной информация stab'ов, встроенной в вывод ELF'а. C++ компилятор в настоящее время (2.6.0) не поддерживает отладочную информацию DWARF, обычно используемую на 386 SVR4 платформах; stab'ы обеспечивают работающий вариант. Он требует gas и gdb, поскольку обычные инструментальные средства SVR4 не могут генерировать или интерпретировать stab'ы.

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