Начиная с версии 4.8, компилятор C ++ GCC (часть G ++) написан уже не на C, а на самом C ++. У меня есть гипотетический вопрос по этому вопросу.
Интересно, как скомпилировать код C ++ GCC на новой платформе, у которой еще нет компилятора C ++. Конечно, вы можете использовать готовые двоичные файлы, скомпилированные на других машинах. Или вы можете использовать более старую версию GCC, написанную на C, и скомпилировать с ней текущую версию.
Однако, без готовых двоичных файлов и только самой новой версии, вы застряли, верно? Если нет, есть ли другие последствия для этой ситуации, вызванные переходом с C на C ++ проекта GCC?
gcc
до 4.8 можно было построить компилятор C, упакованный с произвольной операционной системой (и это ограничило бы вас C89 на многих).Ответы:
На самом деле это хорошо известная концепция, называемая начальной загрузкой . По сути, где-то существует минимальная кодовая база C для создания версии GCC, способной создавать текущую кодовую базу GCC. Самостоятельные языки делали подобные вещи десятилетиями.
источник
gcc
не может быть собрана компилятором только переменного тока. Единственная гарантия компиляции gcc, которую они делают, заключается в том, что gcc-версия N может быть собрана с gcc-версией N-1.However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?
- это предполагает, что у вас нет доступа к предыдущим версиям, и не учитывает другие последствия перехода с C на C ++ для кодовой базы.Создание компилятора, написанного на том же языке, что и компилируемый, называется начальной загрузкой . Статья в Википедии описывает несколько способов загрузки компилятора.
Учитывая ваше ограничение, что у вас есть только исходный код G ++ после 4.8 и нет готовых двоичных файлов для вашей целевой платформы (без существующего компилятора C ++), тогда начальная загрузка компилятора G ++ может быть выполнена с помощью кросс-компиляции .
При начальной загрузке компилятора с использованием кросс-компиляции вы создаете несколько версий своего компилятора.
Если у вас также нет компьютера (или аналогичного устройства) для выполнения начальных шагов, то вы действительно застряли, но вероятность оказаться в такой ситуации и попытаться запустить компилятор незначительна.
источник