Компиляция программ Linux
Все программы для компьютера представляют собой набор команд процессора, которые состоят из определенного набора бит. Этих команд несколько сотен и с помощью них выполняются все действия на вашем компьютере. Но писать программы непосредственно с помощью этих команд сложно. Поэтому были придуманы различные языки программирования, которые проще для восприятия человеку.
Для подготовки программы к выполнению, специальная программа собирает ее из исходного кода на языке программирования в машинный код — команды процессора. Этот процесс называется компиляция. Linux — это свободное программное обеспечение, а поэтому исходные коды программ доступны всем желающим. Если программы нет в репозитории или вы хотите сделать что-то нестандартное, то вы можете выполнить компиляцию программы.
В этой статье мы рассмотрим, как выполняется компиляция программ Linux, как происходит процесс компиляции, а также рассмотрим насколько гибко вы сможете все настроить.
C++ с нуля | 08 | Компиляция и линковка
Подготовка системы
Мы будем компилировать программы, написанные на Си или С++, так как это наиболее используемый язык для программ, которые требуют компиляции. Мы уже немного рассматривали эту тему в статье установка из tar.gz в Linux, но та статья ориентирована больше на новичков, которым нужно не столько разобраться, сколько получить готовую программу.
В этой же статье тема рассмотрена более детально. Как вы понимаете, для превращения исходного кода в команды процессора нужно специальное программное обеспечение. Мы будем использовать компилятор GCC. Для установки его и всех необходимых инструментов в Ubuntu выполните:
sudo apt install build-essential manpages-dev git automake autoconf
Затем вы можете проверить правильность установки и версию компилятора:
Но перед тем как переходить к самой компиляции программ рассмотрим более подробно составляющие этого процесса.
Как выполняется компиляция?
Компиляция программы Linux — это довольно сложный процесс. Все еще сложнее, потому что код программы содержится не в одном файле и даже не во всех файлах ее исходников. Каждая программа использует множество системных библиотек, которые содержат стандартные функции. К тому же один и тот же код должен работать в различных системах, содержащих различные версии библиотек.
На первом этапе, еще до того как начнется непосредственно компиляция, специальный инструмент должен проверить совместима ли ваша система с программой, а также есть ли все необходимые библиотеки. Если чего-либо нет, то будет выдана ошибка и вам придется устранить проблему.
Дальше идет синтаксический анализ и преобразование исходного кода в объектный код, без этого этапа можно было бы и обойтись, но это необходимо, чтобы компилятор мог выполнить различные оптимизации, сделать размер конечной программы меньше, а команды процессора эффективнее.
Затем все объектные файлы собираются в одну программу, связываются с системными библиотеками. После завершения этого этапа программу остается только установить в файловую систему и все. Вот такие основные фазы компиляции программы, а теперь перейдем ближе к практике.
Компиляция программ Linux
Первое что нам понадобиться — это исходники самой программы. В этом примере мы будем собирать самую последнюю версию vim. Это вполне нейтральная программа, достаточно простая и нужная всем, поэтому она отлично подойдет для примера.
Получение исходников
Первое что нам понадобиться, это исходные коды программы, которые можно взять на GitHub. Вы можете найти исходники для большинства программ Linux на GitHub. Кроме того, там же есть инструкции по сборке:
Давайте загрузим сами исходники нашей программы с помощью утилиты git:
git clone https://github.com/vim/vim
Также, можно было скачать архив на сайте, и затем распаковать его в нужную папку, но так будет удобнее. Утилита создаст папку с именем программы, нам нужно сделать ее рабочей:
Настройка 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 есть, и мы можем его использовать:
Во время настройки утилита будет проверять, есть ли все необходимые библиотеки в системе, и если нет, вам придется их установить или отключить эту функцию, если это возможно. Например, может возникнуть такая ошибка: no terminal library found checking for tgetent(). configure: error: NOT FOUND!
В таком случае нам необходимо установить требуемую библиотеку. Например, программа предлагает 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. Этот процесс может быть сложным для новичков, но в целом, все возможно, если потратить на решение задачи несколько часов. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео о том, что такое компилятор и интерпретатор:
Источник: losst.pro
Компиляция файлов C с помощью gcc, шаг за шагом
Чтобы объяснить все этапы компиляции, нам нужно заранее прояснить несколько концепций программирования. В этой статье мы расскажем, что такое язык C, как его скомпилировать с помощью такого инструмента, как gcc, и что происходит, когда мы его компилируем.
Язык программирования C
Все программное обеспечение, программы, веб-сайты и приложения написаны на определенном языке программирования. По сути, все, что мы видим на экранах наших компьютеров или смартфонов, — это просто набор кода, написанный на разных языках и собранный определенным образом. Каждый язык программирования используется по-своему, и сегодня мы сосредоточимся на C.
C — это язык программирования, изобретенный Деннисом Ричи и впервые появившийся в 1972 году. Это то, что мы называем языком низкого уровня, то есть между C и машинным языком существует лишь небольшая абстракция, поэтому его можно рассматривать как более близкий к аппаратному обеспечению компьютера. C также является скомпилированным языком, в отличие от интерпретируемого, что означает, что исходные файлы, написанные на C, должны быть скомпилированы, чтобы они были исполняемыми.
Инструменты
Прежде всего, давайте поговорим об инструментах, которые мы будем использовать в нашем примере. Мы будем работать над Unix-подобной операционной системой, поэтому примеры могут отличаться от Windows. Нам нужен доступ к оболочке, которая, согласно http://linuxcommand.org, является программой, которая принимает команды с клавиатуры и передает их операционной системе для выполнения.
Для этого нам понадобится терминал или эмулятор терминала, который представляет собой просто окно, позволяющее нам взаимодействовать с оболочкой. Внутри терминала мы должны увидеть приглашение оболочки, которое содержит ваше имя пользователя и имя компьютера, за которым следует переменная среды PS1, которая часто является символом $. Мы можем вводить команды после этого символа в том, что мы называем командной строкой. Нам также нужен текстовый редактор, например vi или emacs, для создания исходного файла.
Компиляция
Компиляция — это перевод исходного кода (кода, который мы пишем) в объектный код (последовательность операторов на машинном языке) с помощью компилятора.
Процесс компиляции состоит из четырех этапов:
- Предварительная обработка
- Компиляция
- Сборка
- Связь
В качестве примера мы будем использовать компилятор gcc, что означает Коллекция компиляторов GNU. Проект GNU — это бесплатное программное обеспечение и проект массового сотрудничества, запущенный Ричардом Столлманом в 1983 году, позволяющий разработчикам получить бесплатный доступ к мощным инструментам.
Gcc поддерживает различные языки программирования, включая C, полностью бесплатен и является компилятором для большинства Unix-подобных операционных систем. Чтобы использовать его, мы должны убедиться, что мы установили его на свой компьютер, если его еще нет.
Исходный код
В нашем примере давайте посмотрим на исходный код внутри файла с именем «main.c», где «.c» — это расширение файла, которое обычно означает, что файл написан на C. Это изображение находится внутри текстового редактора vi:
Розовым цветом выделена директива препроцессора #include, которая сообщает компилятору включить заголовочный файл stdio.h, но мы вернемся к нему позже.
Синим цветом выделены комментарии к коду, они полезны для запоминания того, что на самом деле делает ваш код через несколько месяцев после его создания. Нам они не нужны в такой маленькой программе, но ставить их — это хорошая практика.
Далее у нас есть точка входа, функция main (). Это означает, что программа начнется с выполнения операторов, которые находятся внутри блока этой функции, то есть между фигурными скобками. Здесь всего два оператора: один выводит на терминал предложение «Hello, World», а другой говорит программе «вернуть» 0, если она завершилась или завершилась правильно. Итак, после того, как мы скомпилировали его, если мы запустим эту программу, мы увидим только фразу «Hello, World».
Чтобы наш код main.c был исполняемым, нам нужно ввести команду «gcc main.c», и процесс компиляции пройдет через все четыре содержащихся в нем шага. Конечно, у gcc есть опции, которые позволяют останавливать процесс компиляции после каждого шага. Давайте посмотрим на них.
Шаги
1. Препроцессор
Препроцессор выполняет несколько ролей:
- он избавляется от всех комментариев в исходном файле (ах)
- он включает код файла (ов) заголовка, который представляет собой файл с расширением .h, который содержит объявления функций C и определения макросов.
- он заменяет все макросы (фрагменты кода, которым присвоено имя) их значениями
Результат этого шага будет сохранен в файле с расширением «.i», поэтому здесь он будет в main.i.
Чтобы остановить компиляцию сразу после этого шага, мы можем использовать опцию «-E» с командой gcc в исходном файле и нажать Enter.
Вот как должен выглядеть конец файла main.i:
2. Компилятор
Компилятор возьмет предварительно обработанный файл и сгенерирует IR-код (промежуточное представление), так что это создаст файл «.s». При этом другие компиляторы могут создавать ассемблерный код на этом этапе компиляции.
Мы можем остановиться после этого шага с помощью опции «-S» в команде gcc и нажать Enter.
Вот как должен выглядеть файл main.s:
3. Ассемблер
Ассемблер берет ИК-код и преобразует его в объектный код, то есть код на машинном языке (то есть двоичный). В результате будет получен файл с расширением «.o».
Мы можем остановить процесс компиляции после этого шага, используя опцию «-c» с командой gcc и нажав Enter.
Наш файл main.o должен выглядеть так (нет, он не читается человеком):
4. Компоновщик
Компоновщик создает окончательный исполняемый файл в двоичном формате и может играть две роли:
- связывание всех исходных файлов вместе, то есть всех остальных объектных кодов в проекте. Например, если я хочу скомпилировать main.c с другим файлом с именем secondary.c и объединить их в одну программу, это шаг, на котором объектный код secondary.c (то есть secondary.o) будет связан с файлом объектный код main.c (main.o).
- связывание вызовов функций с их определениями. Компоновщик знает, где искать определения функций в статических библиотеках или динамических библиотеках. Статические библиотеки — это «результат того, что компоновщик копирует все используемые библиотечные функции в исполняемый файл», согласно geeksforgeeks.org, а динамические библиотеки «не требуют копирования кода, это делается просто поместив имя библиотеки в двоичный файл ». Обратите внимание, что gcc по умолчанию использует динамические библиотеки. В нашем примере это происходит, когда компоновщик найдет определение нашей функции «put» и свяжет его.
По умолчанию, после этого четвертого и последнего шага, то есть когда вы вводите всю команду «gcc main.c» без каких-либо параметров, компилятор создает исполняемую программу с именем a.out,, которую мы можем запустить, набрав «./a.out» в командной строке.
Мы также можем создать исполняемую программу с желаемым именем, добавив параметр «-o» в команду gcc, поместив после имени файла или файлов, которые мы компилируем, и нажав входить:
Итак, теперь мы могли либо ввести «./a.out», если вы не использовали параметр -o, либо «./my_program» для выполнения скомпилированного кода, на выходе будет «Hello, World», а вслед за ним — оболочка подсказка появится снова.
Коллекция компиляторов GNU предлагает еще много отличных инструментов для компиляции и работы с нашими программами, о которых стоит написать, но эта статья была посвящена основным этапам компиляции. Может в следующий раз!
Источник: questu.ru
Как происходит компиляция. Часть 1.
Эта и последующая статья основаны на университетских занятиях по разработке ПО, которую я изучал несколько лет назад. Студенты моей группы не были программистами. Они играли роль аналитиков, получающих отчеты об ошибках из проекта компилятора. Поэтому пришлось изучать процесс компиляции более подробно, хотя некоторые из студентов никогда не написали ни единой строчки кода. На этих занятиях было интересно, и, полагаю, вам будет не менее интересно читать эту статью.
В этой статье я подробно объясню ход процесса компиляции исходного текста в исполняемую программу. Я не буду заострять внимание на таких моментах, как окружение Make, или Revision Control, хотя это было обязательно на тех университетских занятиях. Здесь будет лишь разобрано, что происходит после отдачи команды gcc test.c .
Вообще говоря, процесс компиляции можно разбить на 4 этапа: обработка препроцессором, компиляция, ассемблирование и связывание (линковка). Обсудим подробнее каждый этап.
Перед тем как обсуждать компиляцию программы, нужно иметь собственно программу. Наша программа должна быть простой, но не настолько, чтобы лишить нас удовольствия обсудить все интересующие нас детали компиляции. К примеру, вот такая программа:
#include // Это комментарий. #define STRING «This is a test» #define COUNT (5) int main () < int i; for (i=0; ireturn 1; >
Сохранив эту программу в файле с именем test.c , мы сможем ее скомпилировать с помощью простой команды:
gcc test.c
На выходе у нас окажется исполняемый файл, имеющий имя a.out . Почему именно такое имя — есть небольшая история. Во времена компьютера PDP, a.out означало «assembler output» — «вывод ассемблера». В данный момент это означает просто старый формат исполняемого файла. В современных версиях Unix и Linux используется формат ELF.
Он намного более сложен. Хотя получившийся файл и носит имя «a.out», но на самом деле исполняемый файл имеет формат ELF. Но вернемся к нашей программе. Запустим ее с помощью команды ./a.out .
This is a test This is a test This is a test This is a test This is a test
Конечно, тут для нас нет никаких сюрпризов. Поэтому обсудим этапы, по которым прошел gcc в процессе создания файла a.out из исходника test.c.
Как было указано ранее, первым этапом работы компилятора является обработка исходного кода препроцессором языка C. Препроцессор выполняет 3 операции: текстовые замены, вырезание комментариев и включение файлов. Текстовые замены и включения файлов запрашиваются программистом с помощью директив препроцессора. Директивы препроцессора — это строки, начинающиеся с символа «#».
Первая директива в нашем примере подключает стандартный заголовочный файл stdio.h , его содержимое подставляется в наш исходный файл. Вторая и третья директивы заменяют строки в нашем коде. Запустив gcc с ключом «-E», можно остановить его работу после первого этапа и увидеть результаты работы препроцессора над нашим кодом. Файл stdio.h довольно велик, поэтому я опущу некоторые ненужные для нас строки.
gcc -E test.c > test.txt # 1 «test.c» # 1 «/usr/include/stdio.h» 1 3 4 # 28 «/usr/include/stdio.h» 3 4 # 1 «/usr/include/features.h» 1 3 4 # 330 «/usr/include/features.h» 3 4 # 1 «/usr/include/sys/cdefs.h» 1 3 4 # 348 «/usr/include/sys/cdefs.h» 3 4 # 1 «/usr/include/bits/wordsize.h» 1 3 4 # 349 «/usr/include/sys/cdefs.h» 2 3 4 # 331 «/usr/include/features.h» 2 3 4 # 354 «/usr/include/features.h» 3 4 # 1 «/usr/include/gnu/stubs.h» 1 3 4 # 653 «/usr/include/stdio.h» 3 4 extern int puts (__const char *__s); int main () < int i; for (i=0; ireturn 1; >
Сразу видно, что препроцессор C дописал к нашей простой программе много новых строк.
Я привел сокращенную версию, на самом деле после обработки препроцессором выходной файл содержал более 750 строк. Итак, что же было добавлено и почему? Начнем с того, что мы запросили включение заголовочного файла stdio.h. В свою очередь, stdio.h запросил включение других заголовочных файлов, и так далее.
Препроцессор сделал отметки о том, включение какого файла и на какой строке было запрошено. Эта информация будет использована на следующих этапах компиляции. Так, строки
# 28 «/usr/include/stdio.h» 3 4 # 1 «/usr/include/features.h» 1 3 4
означают, что файл features.h был запрошен на строке 28 файла stdio.h. Препроцессор создает эту отметку перед соответствующим «интересным» местом, так что если встретится ошибка, компилятор сможет нам сообщить, где именно произошла ошибка.
Теперь посмотрим на эти строки:
# 653 «/usr/include/stdio.h» 3 4 extern int puts (__const char *__s);
Здесь puts() объявлена как внешняя функция (extern), возвращающая целочисленной значение и принимающая массив постоянных символов в качестве параметра. Если бы случилась несостыковка, касающаяся этой функции, тогда компилятор смог бы сообщить нам, что данная функция была объявлена в файле stdio.h на строке 653.
Интересно, что на данном этапе функция puts() не определена, а лишь объявлена. Здесь пока нет реального кода, который будет работать при вызове функции puts(). Определение функций будет происходить позже.
Также обратите внимание на то, что все комментарии были удалены препроцессором, и произведены все запрошенные текстовые замены. В данный момент программа готова к следующему этапу, трансляции на язык ассемблера.
Результат трансляции можно увидеть с помощью ключа -S:
gcc -S test.c
Будет создан файл с именем test.s, содержащий реализацию нашей программы на языке ассемблера. Давайте поглядим, что в нем.
Я не силен в языке ассемблера, однако некоторые моменты можно выделить сразу. Можно видеть, что строка сообщения была перемещена в другую область памяти и стала называться .LC0 . Основную часть кода занимают операции, от начала выполнения программы и до ее завершения. Очевидна реализация цикла for на метке .L2 : это просто проверка (cmpl) и инструкция «переход, если меньше» («Jump if Less Than», jle).
Инициализация цикла осуществляется оператором movl перед меткой .L3 . Между метками .L3 и .L2 очевиден вызов функции puts(). Ассемблер знает, что вызов функции puts() по имени здесь корректен, и что это не метка памяти, как например .L2 . Обсудим этот механизм далее, когда будем говорить о заключительном этапе компиляции, связывании. Наконец, наша программа завершается операцией возвращения (ret).
Следующий шаг компиляции — это ассемблирование в объектный файл. Объектные файлы будут рассмотрены далее, когда мы дойдем до процесса связывания. Достаточно сказать, что ассемблирование — это процесс преобразования программы на языке ассемблера в машинный код.
Связывание — это последний этап, который либо ведет к получению исполняемого файла, либо объектного файла, который можно объединить с другим объектным файлом, и таким образом получить исполняемый файл. Проблема с вызовом функции puts() разрешается именно на этапе связывания. Помните, в stdio.h функция puts() была объявлена как внешняя функция?
Это и означает, что функция будет определена (или реализована) в другом месте. Если бы у нас было несколько исходных файлов нашей программы, мы могли бы объявить некоторые функции как внешние и реализовать их в различных файлах; такие функции можно использовать в любом месте нашего кода, ведь они объявлены как внешние. До тех пор пока компилятор не знает, откуда берется реализация такой функции, в получаемом коде лишь остается ее «пустой» вызов. Линковщик разрешит все эти зависимости и в процессе работы подставит в это «пустое» место реальный адрес функции.
Линковщик выполняет также и другую работу. Он соединяет нашу программу со стандартными процедурами, которые будут запускать нашу программу. К примеру, есть стандартная последовательность команд, которая настраивает рабочее окружение, например, принимает аргументы командной строки и переменные системного окружения. В завершении программы должны также присутствовать определенные операции, чтобы помимо всего прочего программа могла возвратить код ошибки. Очевидно, эти стандартные операции порождают немалое количество кода.
Если скомпилировать нашу программу как указано выше, мы получим исполняемый файл размером 6885 байт. Однако если указать компилятору, чтобы он пропустил этап связывания, с помощью ключа -c :
gcc -c test.c -o test.o
тогда мы получим объектный файл размеров всего 888 байт. Разницу составляет как раз код для запуска и завершения программы, а также вызов функции puts() из библиотеки libc.so.
Итак, мы более-менее подробно рассмотрели процесс компиляции. Надеюсь, было интересно. В следующий раз мы обсудим более подробно процесс связывания и рассмотрим, как компилятор gcc оптимизирует программы.
Источник: rus-linux.net
Как скомпилировать программу C, используя компилятор GNU Compiler (GCC)
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 18 человек(а).
Количество просмотров этой статьи: 71 593.
В этой статье:
В этой статье рассказывается, как скомпилировать программу из исходного кода на языке C с помощью компилятора GNU Compiler (GCC) для Linux или Minimalist Gnu (MinGW) для Windows.
Метод 1 из 2:
Использование GCC для Unix
В Unix-системе откройте терминал.
- Если компилятор не установлен, почитайте документацию к своему дистрибутиву Linux, чтобы узнать, как скачать соответствующий пакет.
- Если вы компилируете программу, написанную на языке C++, вместо «gcc» введите «g++».
- Например, если файл с исходным кодом «main.c» находится в каталоге /usr/wikiHow/source, введите cd /usr/wikiHow/source .
- Если на экране появились сообщения об ошибках, введите gcc -Wall -o errorlog file1.c , чтобы получить дополнительную информацию. Затем в текущем каталоге откройте файл «errorlog»; для этого введите cat errorlog .
- Чтобы скомпилировать одну программу из нескольких файлов с исходным кодом, введите gcc -o outputfile file1.c file2.c file3.c .
- Чтобы скомпилировать сразу несколько программ из нескольких файлов с исходными кодами, введите gcc -c file1.c file2.c file3.c .
Запустите скомпилированную программу. Введите /HelloWorld , где «HelloWorld» замените именем программы.
Метод 2 из 2:
Использование MinGW для Windows
Скачайте Minimalist GNU для Windows (MinGW). Эту версию GCC для Windows довольно легко установить. Установочный файл можно скачать на этом сайте. [2] X Источник информации
- Если файл не запустился автоматически, дважды щелкните по нему в папке для загрузок, а затем нажмите «Установить».
- Рекомендуем установить MinGW в папку по умолчанию, а именно в ( C:MinGW ). Если нужно поменять папку, не выбирайте папку, в названии которой присутствуют пробелы, такую как «Program Files». [3] X Источник информации
- На левой панели рекомендуем нажать «Basic Setup» (Обычная установка). Затем на правой панели поставьте флажки рядом со всеми перечисленными компиляторами.
- Более опытные пользователи могут выбрать опцию «All packages» (Все пакеты) и отметить дополнительные компиляторы.
Откройте меню Installation (Установка). Оно находится в верхнем левом углу MinGW.
Нажмите Apply Changes (Применить изменения).
Нажмите Apply (Применить). Компиляторы будут загружены и установлены.
- Нажмите ⊞ Win + S , чтобы открыть строку поиска, и введите среда .
- В результатах поиска щелкните по «Изменение системных переменных среды».
- Нажмите «Переменные среды».
- Нажмите «Изменить» (под «Пользовательские переменные»).
- Прокрутите вниз информацию в поле «Значение переменной».
- Непосредственно под последней записью введите ;C:MinGWbin . Обратите внимание, что если вы установили MinGW в другую папку, введите ;C:путь-к-папкеbin .
- Дважды нажмите «OK». Еще раз нажмите «OK», чтобы закрыть окно.
- Нажмите ⊞ Win + S и введите строка .
- В результатах поиска щелкните правой кнопкой мыши по «Командная строка» и в меню выберите «Запуск от имени администратора».
- Нажмите «Да», чтобы разрешить внесение изменений.
- Например, если файл с исходным кодом «helloworld.c» находится в папке C:SourcePrograms, введите cd C:SourcePrograms .
- Любые ошибки программирования должны быть устранены перед компиляцией программы.
Чтобы запустить программу, введите ее имя. Если программа называется helloworld.exe, введите это имя, чтобы запустить программу.
- Компиляция кода с помощью флага -g приведет к созданию отладочной информации, которая может быть использована соответствующим отладчиком, например, GDB.
- Создайте сборочный файл проекта (make-файл), чтобы упростить компиляцию больших программ.
- Если вы активно используете оптимизацию, помните, что оптимизация по скорости может привести к снижению размера и, иногда, качества (и наоборот).
- При компиляции программы на языке C++ используйте G++ так же, как вы используете GCC. Помните, что файлы с исходным кодом на языке C++ имеют расширение .cpp, а не .c.
Что вам понадобится
Дополнительные статьи
запустить файл Python с помощью Командной строки Windows
вставить пробелы в HTML
написать программу в блокноте
создать очень простую программу в Python
менять цвета в Командной строке
добавить горизонтальную линию в HTML
сделать задержку в командном файле
писать компьютерные программы
создать гиперссылку в HTML
создать калькулятор, используя язык HTML
научиться писать программы
изменить размер шрифта в Python shell
использовать DOSBox
добавлять и удалять учетные записи пользователей через командную строку Windows
- ↑http://pages.cs.wisc.edu/~beechung/ref/gcc-intro.html
- ↑http://www.mingw.org/wiki/Getting_Started
- ↑http://www.mingw.org/wiki/Getting_Started
- ↑http://www.mingw.org/wiki/mingw_for_first_time_users_howto
Об этой статье
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 18 человек(а). Количество просмотров этой статьи: 71 593.
Источник: ru.wikihow.com