0 / 0 / 0
Регистрация: 23.09.2015
Сообщений: 72

Почему gcc использует аж трехцикловую компиляцию?

29.09.2015, 19:57. Показов 1825. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обычно процесса два компилятор и линкер
А тут три
1.Компилятор cc1plus.exe <на выходе листинг ассемблера>
2.Ассемблер AS.EXE <на выходе объектный файл)
3.Линкер LD.EXE <на выходе исполняемый наконец-то>
Почему так странно?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.09.2015, 19:57
Ответы с готовыми решениями:

Параметр конструктора класса нигде не задействован, но его отсутствие влияет на компиляцию, почему так?
#include &lt;string&gt; #include &lt;vector&gt; using namespace std; ////////////////////////////////////////// class kl { ...

Как записать компиляцию файла С в cgi компилятором gcc?
Добрый день! Вопрос такой. Как скомпилировать в gcc файл c в cgi в Убунту. Если прописать gcc путь/script.c компиляция...

Почему не проходит компиляцию? выдает ошибку
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids,...

10
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.09.2015, 23:50
Лучший ответ Сообщение было отмечено tinyvasily как решение

Решение

Компилятор gcc многоплатформенный. То, что реально можно считать компилятором (или, более правильно, транслятором - cc1 и cc1plus) - это многоплатформенная вещь. А потому очень удобно, когда из компилятора выкинуты все (или почти все кодировки), а так же форматы бинарных файлов и на выходе компилятора получается ассемблерный текст. Далее этот текст скармливается ассемблеру as (gas), который разрабатывает другая команда разработчиков. В ассемблере уже есть и кодировки и конкретные бинарные форматы. Т.е. с такой технологией весьма удобно отделять мух от котлет типа того, что пишется практически одинаковый компилятор для intel-linux и intel-windows, а вся кухня по бинарным форматам в компиляторе отсутствует.

Некоторые gnu-расширения (ассемблерные вставки и entry, некоторые конструкции типа weakref, что-то ещё было, с ходу не вспомню) спроектированы исходя из именно такой конструкции компилятора и позволяют сильно упростить конструкцию самого компилятора. В реальной жизни часто хочется на выходе компилятора видеть именно ассемблерный текст, чтобы понять структуру кода, а потому в общем случае в компиляторе пришлось бы делать два выхода - ассемблерный текст и объектный файл. И здесь опять-таки технически будет куда более удобно и просто, когда процесс компиляции идёт всегда до ассемблерного текста, а дальше идёт его отдельная ассембляция. У трёхфазной схемы есть только один очевидный недостаток - это замедление скорости компиляции. Условно это 1-2% от общего времени компиляции, а потому совсем некритично. Но есть и менее очевидный недостаток - на базе исходников компилятора не получится сделать культурный компиляторный конструктор по типу LLVM, но тут же вопрос из разряда философии

В старых версиях gcc было так вообще 4 компоненты, а не 3 - препроцессор был выделен в отдельную компоненту. Но из-за некоторых тонкостей синтаксиса Си++ пришлось с такой схемой расстаться
7
0 / 0 / 0
Регистрация: 23.09.2015
Сообщений: 72
30.09.2015, 10:18  [ТС]
Evg,
Я пишу свой компилятор,где исходники то взять и на чем они?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
30.09.2015, 10:25
Цитата Сообщение от tinyvasily Посмотреть сообщение
Я пишу свой компилятор,где исходники то взять и на чем они?
Здесь: https://gcc.gnu.org/releases.html
С и С++ в основном, ну и скрипты.
1
0 / 0 / 0
Регистрация: 23.09.2015
Сообщений: 72
30.09.2015, 10:49  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Здесь: https://gcc.gnu.org/releases.html
С и С++ в основном, ну и скрипты.
Скачал но их так много а я имел в виду исходники Mingw cc1plus.exe


И чем это все собирается?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
30.09.2015, 11:15
Цитата Сообщение от tinyvasily Посмотреть сообщение
Скачал но их так много а я имел в виду исходники Mingw cc1plus.exe
cc1plus там тоже есть.
Цитата Сообщение от tinyvasily Посмотреть сообщение
И чем это все собирается?
С помощью mingw и собирается. Только там еще n-ное количество инструментов окружения должно быть. Лучше всего поставить MSYS для сборки.

Скажи, ты хочешь написать компилятор С++? Один? И использовать для обучения исходники GCC?
Может начать с чего-то попроще? Ну и книгу почитать. Вот - классика.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.09.2015, 12:05
Цитата Сообщение от DrOffset Посмотреть сообщение
С и С++ в основном
Компилятор написан на чистом Си. Причём на стандартном. У gnu'шников в своё время была идеология - мы выдаём миру компилятор + binutils (т.е. полный toolchain), написанные на чистом стандартном (без расширений) Си. Т.е. собрать и развернуть это дело можно будет на любой платформе. А далее, используя gcc, уже можно собрать весь остальной gnu'тый софт, написанный на GNU C/C++

Цитата Сообщение от tinyvasily Посмотреть сообщение
И чем это все собирается?
Если есть возможность работать под линуксом - можно так: Как установить gcc-4.6.3 параллельно с gcc-4.4?
Если обязательно под винду, можешь спросить тут: Сборки MinGW (GCC-win32/win64) от niXman

Цитата Сообщение от DrOffset Посмотреть сообщение
Может начать с чего-то попроще?
Начинать лучше с интерпретаторов, а не с компиляторов: Пишем свой интерпретатор языка BASIC
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
30.09.2015, 12:11
Цитата Сообщение от Evg Посмотреть сообщение
Компилятор написан на чистом Си.
Начиная с 4.8.0 он написан на C++.
GCC now uses C++ as its implementation language.
https://gcc.gnu.org/gcc-4.8/changes.html
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
30.09.2015, 12:11
Цитата Сообщение от Evg Посмотреть сообщение
Компилятор написан на чистом Си.
Я говорил за весь пакет исходников, который по ссылке. Это должно было быть понятно.
Цитата Сообщение от Evg Посмотреть сообщение
Начинать лучше с интерпретаторов, а не с компиляторов
Мне это зачем?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.09.2015, 14:23
> Начиная с 4.8.0 он написан на C++

Посмотрел на исходники gcc-4.8.0 - действительно. Есть файлы *.c, но в них содержатся конструкции от Си++ (не понимаю, в чём была проблема обозвать файлы как *.cc). Но это несколько условный Си++, он в том объёме, который не требует никакой дополнительной run-time поддержки. Наверное решили, что теперь на каждой платформе есть компилятор с Си++
0
0 / 0 / 0
Регистрация: 23.09.2015
Сообщений: 72
30.09.2015, 14:25  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
> Начиная с 4.8.0 он написан на C++

Посмотрел на исходники gcc-4.8.0 - действительно. Есть файлы *.c, но в них содержатся конструкции от Си++ (не понимаю, в чём была проблема обозвать файлы как *.cc). Но это несколько условный Си++, он в том объёме, который не требует никакой дополнительной run-time поддержки. Наверное решили, что теперь на каждой платформе есть компилятор с Си++
Я это тоже заметил.Но забыл Вам сказать. C файлы содержат C++ инструкции!Они должны были быть *.cpp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2015, 14:25
Помогаю со студенческими работами здесь

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но на моей основной машине установлена 64...

Почему не использует полностью ОЗУ ?
Не использует полностью ОЗУ!!!

Почему использует 3гб вместо 4гб?
Тема довольно избитая, но почитав несколько топов по этому поводу,я все таки не понял, почему у меня так случилось.Винда вроде...

Почему роутер использует ip 192.168.1.1
что особенного в ip 192.168.1.1?

Почему gcc ругается на std::cout?
Проблема такая: работаю на Mac, установил Xcode, запускаю gcc в командной строке. Имеется элементарная программка: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru