8-900-374-94-44
[email protected]
Slide Image
Меню

C компиляция: Компиляция программы на языке C

Содержание

Компилятор C | Dymola — Dassault Systèmes®

Visual Studio — бесплатные версии:
  • Visual Studio 2012 Express Edition (11.0)
  • Visual Studio 2015 Express Edition for Windows Desktop (14.0)
  • Visual Studio 2017 Community 2017 (15)
  • Visual Studio 2017 Desktop Express for Windows Desktop (15) — обратите внимание, что данный компилятор поддерживает только компиляцию в 32-разрядные исполняемые файлы Windows.
  • Microsoft Build Tools 2017
    • Рекомендуемые компоненты для работы Dymola:
      • Visual C++ Build Tools
      • поддержка C++/CLI
    • При установке с указанными выше параметрами IDE (интегрированная среда разработки) не устанавливается и доступны только функции командной строки
    • Эта установка не отображается как отдельный вариант при последующем выборе компилятора в Dymola. Можно выбрать такой же альтернативный вариант, как и для других выпусков Visual Studio 2017.
  • Visual Studio 2019 Community (16)
  • Microsoft Build Tools 2019 (см. инструкции по установке и тестированию инструментов Microsoft Build Tools)
    • Рекомендуемые компоненты для работы Dymola:
      • Visual C++ Build Tools
      • поддержка C++/CLI

Ссылка на бесплатный компилятор Visual Studio приведена ниже в разделе Загрузки. Права на использование Visual Studio Community зависят от сегмента клиента и сценариев использования. Посетите веб-сайт Microsoft.

Visual Studio — профессиональные версии:
  • Visual Studio 2012 (11.0)
  • Visual Studio 2015 (14.0)
  • Visual Studio Professional 2017 (VS 15)
  • Visual Studio Enterprise 2017 (VS 15)
  • Visual Studio Professional 2019 (VS 16)
  • Visual Studio Enterprise 2019 (VS 16)

Ссылка на компилятор Visual Studio приведена ниже в разделе Загрузки.

Компилятор Intel:

Компиляторы Intel больше не поддерживаются.

Компиляторы GCC:

Установку 32- и 64-разрядных версий MinGW можно выполнить с помощью одной и той же программы установки с использованием различных параметров. Ссылка для скачивания: https://sourceforge.net/projects/mingw-w64. Запустите программу установки MinGW и выберите:

  • Для 32-разрядных систем
    • Архитектура: i686
    • Потоки: win32
    • Исключение: dwarf
  • Для 64-разрядных систем
    • Архитектура: x86_64
    • Потоки: posix
    • Исключение: she

Были протестированы следующие компиляторы (более поздние версии обычно совместимы):

  • 32-разрядная версия MinGW, GCC 5.3, 6.3, 8.2
  • 64-разрядная версия MinGW, GCC 5.3, 7.3, 8.1

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

Компилятор WSL GCC (кросс-компилятор Linux):

Dymola на платформе Windows поддерживает кросс-компиляцию для Linux с помощью компилятора Windows Subsystem for Linux (WSL) GCC. Настройка WSL по умолчанию — только 64-разрядная версия, Dymola использует это ограничение. См. Использование Windows Subsystem for Linux с Dymola.

Установка компилятора C на платформе Windows

Обратите внимание, что на платформе Windows необходимо отдельно установить компилятор C/C++. Компилятор C можно установить до установки Dymola или после нее. Вы можете запускать Dymola и просматривать модели, но для преобразования любых моделей необходимо установить компилятор C. Чтобы изменить компилятор, используемый приложением Dymola для преобразования модели, выберите пункт меню Имитационное моделирование > Настройка…, затем выберите вкладку «Компилятор». (Пример вкладки «Компилятор» приведен справа). Выбранный компилятор сохраняется в настройках пользователя и используется во всех последующих установленных версиях Dymola.

Компиляторы C на платформе Linux

В системах Linux используется стандартный компилятор. Для управления процессом компиляции используется сценарий оболочки insert/dsbuild. sh. Dymola 2022x работает в 64-разрядной версии Red Hat Enterprise Linux с версией gcc 8.3.1 и совместимыми системами. Помимо gcc код модели на языке C может компилироваться с помощью clang. Для просмотра инструкций по изменению компилятора и дополнительных примечаний нажмите здесь.

Компиляция программ | hpc@cmc

На суперкомпьютере Polus установлены как компиляторы семейства GNU, так и фирменные компиляторы компании IBM поддерживающие языки программирования C/C++, Fortran. Ниже они перечислены в таблице, постфикс _r в названии скрипта, применяемого для компиляции, говорит о том, что будут использованы потокобезопасные компоненты. Такие скрипты необходимо вызывать при сборке OpenMP- и pthreads-программ.

КомпиляторC/C++Fortran
CC++FortranFortran 90Fortran 95Fortran 2003Fortran 2008
GNUgccg++gfortran
IBM XLxlc
xlC/xlc++xlfxlf90xlf95xlf2003xlf2008
потокобезопасная версияxlc_rxlC_r/xlc++_rxlf_rxlf90_rxlf95_rxlf2003_rxlf2008_r

Для создания и запуска программ написанных с использованием MPI стандарта необходимо загрузить модуль SpectrumMPI. Для этого необходимо выполнить следующую коменду

module load SpectrumMPI

Возможно также использование OpenMPI, для его загрузки нужно выполнить

module load OpenMPI

Однако использование SpectrumMPI предпочтительней. Всё дальнейшее описание будет приводится для SpectrumMPI.

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

КомпиляторC/C++Fortran
CC++FortranFortran 77Fortran 90
mpiccmpicxxmpifortmpif77mpif90
IBM XLmpixlcmpixlCmpixlf

Для всех компиляторов, не только компиляторов IBM, но и gcc, а так же большинства других компиляторов, имеются следующие ключи:

КлючЗначение
-I include_dir опция, которая задаёт пути для поиска include файлов
-L library_dir задаёт пути для поиска подключаемых библиотек.
-l library_name линкует с указанной библиотекой
-o file_name задаёт имя бинарного файла, который будет получен как результат деятельности компилятора
-g добавление отладочной информации в бинарный код, после этого при запуске программы через отладчик будет доступна информация об исходном коде программы.
-ON Опции начального уровня оптимизации (N число от 1 до 5)

Нестандартные ключи компиляторов IBM

КлючЗначение
-qsmp=omp обеспечивает возможность писать программы с использованием OpenMP стандарта.
-qsmp=auto для автоматического распараллеливания программ
-qarch=pwr8 компилятор генерирует оптимальный код для Power8 процессоров.
-qhot оптимизация кода с принудительным внедрением параллелизма внутрь кода, здесь начинает использоваться параллелизм функциональных устройств архитектуры Power8. При этом может нарушаться последовательность команд, которая была задана в исходном файле. В результате, программа становится недетерминированной.

Процесс компиляции C

Перейти к основному содержанию

Максимилиано Пан

Максимилиано Пан

Инженер-программист в Sabre Corporation

Опубликовано 11 февраля 2021 г.

+ Подписаться

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

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

Компиляция C

Процесс компиляции C преобразует исходный код, взятый в качестве входных данных (файл .c), в объектный код (машинный код). Этот процесс можно разделить на четыре этапа:

  1. Предварительная обработка: Компиляция C начинается с предварительной обработки исходного файла, на этом этапе удаляются комментарии, включаются заголовки и раскрываются макросы. После предварительной обработки генерируется временный расширенный файл (файл .i).
  2. Компиляция: На этом этапе компилятор вступает в действие, беря предварительно обработанный файл, который он проверяет на синтаксические или структурные ошибки (в случае ошибки процесс компиляции останавливается и показывает соответствующие ошибки). После компиляции генерирует промежуточный код на ассемблере (файл .s).
  3. Ассемблирование: Ассемблер принимает скомпилированный исходный код (на языке ассемблера) и транслирует его в низкоуровневый машинный код. После успешной сборки он генерирует файл объективного кода (файл .o).
  4. Связывание: В последней задаче процесса компиляции компоновщик вступает в действие, беря файл, сгенерированный ассемблером (объектный код), и связывает все вызовы функций с их исходным определением, добавляя функции, включенные в библиотеки, и другие файлы. Компоновщик генерирует окончательный исполняемый файл (по умолчанию он называется a.out).

Коллекция компиляторов GNU  ( GCC )

GCC — это коллекция компиляторов, созданных в рамках проекта GNU, инструмента, который преобразует исходный код различных языков программирования на основе C (таких как C++ или Objective C). ) в машинный код.

 gcc <файл. с>
 

Это базовый состав команды gcc , она берет исходный файл и выполняет весь процесс компиляции от предварительной обработки до компоновки, возвращает исполняемый файл.

 gcc -E <файл.c>
 

С опцией -E компилятор берет исходный файл и выполняет только предварительную обработку (первый шаг процесса), он не компилирует, не собирает и не компонует и возвращает расширенный файл.

 gcc -S <файл.с>
 

С опцией -S компилятор берет исходный файл и выполняет первые два шага (предварительную обработку и компиляцию), не ассемблирует и не компонует и возвращает файл на ассемблере.

 gcc -c <файл.c>
 

С опцией -c компилятор берет исходный файл и выполняет первые шаги дерева (предварительная обработка, компиляция и сборка), не компонует и возвращает файл в объектном коде.

Чтобы узнать больше о команде gcc и ее параметрах, посетите gcc man.

Другие также смотрели

Исследуйте темы

Что означает компиляция в программировании на C?

Программирование. Способность воплощать идеи в реальность — не что иное, как сверхспособность. Языки программирования могут варьироваться от простых до сложных и от низкоуровневых до высокоуровневых. Однако компиляция написанного кода является обычным процессом для большинства языков высокого уровня.

Одним из наиболее широко используемых языков программирования во всем мире является язык C. Это машинно-независимый язык, представленный еще в 1972 году. С момента своего появления C использовался для написания всего, от сложных игр и приложений до полнофункциональных операционных систем, таких как Microsoft Windows.

Однако без компилятора языка «C», высокоуровневый код, написанный разработчиками для создания этих продуктов, не мог быть собран в машинный код. Так что можно с уверенностью сказать, что эти продукты не существовали бы без компиляции! Прежде чем мы углубимся в процесс компиляции для C, давайте подробно разберемся в этом термине.

Что означает компиляция?

Большая часть программирования или «кодирования» выполняется на языках, которые обычно имитируют тот или иной естественный язык мира, чаще всего – английский.

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

Так что за волшебство превращает наш человеческий код в машинный язык? Вот где появляется компилятор! Большинство языков программирования имеют встроенные компиляторы. Они проверяют написанный код на наличие синтаксических, логических или структурных ошибок и преобразуют его в машинный язык, только если код равен 9.0097 без ошибок . Этот процесс называется Компиляция .

Процесс компиляции состоит из четырех основных этапов:

  1. Предварительная обработка
  2. Компиляция
  3. Сборка
  4. Связывание

Давайте рассмотрим каждый из них по порядку.

1. Предварительная обработка

Код, который пишет человек, называется исходным кодом . Файл исходного кода сохранен с расширением «.c». На первом этапе компиляции исходный код поступает на препроцессор, который выполняет над ним три основные функции:

  1. Очистка кода
  2. Принятие директив
  3. Расширение кода

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

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

Это делает код легко расшифровываемым машинами.

Следующим действием препроцессора является передача директив препроцессора. Это просто строки кода в файле исходного кода, которые начинаются с символа «#». Вот некоторые примеры директив препроцессора:

  • #include
  • #определить
  • #undef
  • #если
  • #ifelse

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

Наконец, препроцессор расширяет код в файле исходного кода, и этот расширенный код затем передается компилятору.

Если вы хотите понять разницу между компилятором и интерпретатором, щелкните здесь.

2. Компиляция

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

3. Ассемблирование 

Ассемблер преобразует скомпилированный код в чистый двоичный код или ассемблерный код (единицы и нули). Файл, который создает ассемблер, называется объектным файлом.

Он имеет то же имя файла, что и исходный файл, но имеет расширение «.obj» в DOS и «.o» в UNIX. Например, если исходный файл называется «Hello World.c» , то объектный файл будет называться «Hello World.obj» .

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

4. Связывание

Язык программирования «C» имеет библиотеку предварительно скомпилированных функций. Все программы, написанные на языке C, используют одну или несколько из этих библиотечных функций. Собранный код этих файлов библиотеки хранится с расширением ‘.lib’ (или ‘.a’) .

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

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

Полученный файл является полностью скомпилированным и готовым к выполнению. Он всегда имеет то же имя файла, что и исходный файл, но может иметь расширение «.exe» в DOS или «a.out» в UNIX.

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

#include   

int main()  

{

PRINTF ( «Hello CodeQuotient» )

Возврат 0;

}  

Чтобы лучше понять, вот схема компиляции этой программы: Код файла > Сборка > Объектный файл ( Hello CodeQuotient.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *