Чи не виникає проблема з куркою-яйцем, оскільки GCC написаний самим C ++?


10

З моменту випуску 4.8 компілятор C ++ GCC (його частина G ++) записується вже не на C, а в сам C ++. У мене є гіпотетичне питання з цього приводу.

Цікаво, як скомпілювати код C ++ GCC на новій платформі, у якій ще немає компілятора C ++. Звичайно, ви можете використовувати попередньо вбудовані бінарні файли, зібрані на інших машинах. Або ви можете скористатися старішою версією GCC, яка була написана на мові C, і компілюйте з нею поточну версію.

Однак без попередньо вбудованих бінарних файлів та просто новітньої версії ви застрягли, правда? Якщо ні, чи є інші наслідки для цієї ситуації, пов'язані з переходом від C до C ++ проекту GCC?


3
Я не впевнений, що ви тут запитуєте, хоча ви можете прочитати про перехресну компіляцію .

5
Повністю нова платформа не матиме компілятора C ++ і компілятора C. Перехресне складання - відповідь.
документ

1
Ви, ймовірно, повинні прочитати перехід GCC до C ++ , перехід до C ++ і, можливо , тепер для GCC буде потрібно C ++, щоб побудувати на Reddit. Я не впевнений, що gccдо 4.8 можна було побудувати компілятор C, упакований з довільною операційною системою (а це може обмежити вас на C89 у багатьох).

2
Я не розумію, що стосується C ++ у цьому питанні. Проблема існує з C або будь-якою іншою мовою, чи не так?
РемкоГерліх

Відповіді:


16

Це насправді добре відома концепція під назвою завантажувальна програма . По суті, десь існує мінімальна база коду С для побудови версії GCC, яка здатна побудувати поточну базу даних GCC. Мови з власним хостингом уже десятки років роблять подібне.


Власне, ні. Це вже не так (і питання з питанням). gccбільше не можна будувати лише компілятором змінного струму. Єдина гарантія компіляцій gcc, які вони роблять, - це те, що gcc версія N може бути побудована за допомогою gcc версії N-1.

9
@MichaelT: Але попередню версію GCC можна побудувати за допомогою компілятора C, який може потім компілювати більш пізні версії, написані на C ++, про що я вже говорив.
Мейсон Уілер

Я також хотів би вказати на запитання у запитанні: 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 ++ для бази даних коду.

9

Створення компілятора, написаного тією ж мовою, що і він, називається завантажувальним . У статті вікіпедії описано декілька способів завантаження компілятора.

Зважаючи на ваше обмеження, що у вас є лише вихідний код G ++ після 4,8 і відсутні попередньо вбудовані бінарні файли для вашої цільової платформи (немає існуючого компілятора C ++), тоді завантаження компілятора G ++ може бути здійснено шляхом перехресної компіляції .

Під час завантаження компілятора за допомогою перехресної компіляції ви створюєте кілька версій компілятора

  1. На свій ПК ви встановлюєте компілятор C ++ (може бути будь-який компілятор C ++, не повинен бути G ++)
  2. Використовуючи цей компілятор, ви створюєте крос-компілятор G ++, який може виконуватись на ПК та генерує код для цільової платформи
  3. Використовуючи щойно створений крос-компілятор G ++, ви створюєте нативний компілятор G ++, який може працювати на цільовій платформі та створювати код для нього.
  4. Ви закінчили. Ви створили компілятор C ++ для нової платформи.

Якщо ви також не маєте ПК (або подібного), щоб виконати початкові кроки, то ви дійсно застрягли, але шанс опинитися в цій ситуації і спробувати завантажувати компілятор є незначним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.