Od wydania 4.8 kompilator C ++ GCC (część G ++) jest już napisany nie w języku C, ale w samym C ++. Mam hipotetyczne pytanie w tej sprawie.
Zastanawiam się, jak skompilować kod C ++ GCC na nowej platformie, która nie ma jeszcze kompilatora C ++. Oczywiście można użyć wstępnie skompilowanych plików binarnych skompilowanych na innych komputerach. Lub możesz użyć starszej wersji GCC, która została napisana w C i skompilować z nią bieżącą wersję.
Jednak bez gotowych plików binarnych i tylko najnowszej wersji utknąłeś, prawda? Jeśli nie, czy istnieją inne implikacje dla tej sytuacji wynikające z przejścia z C na C ++ projektu GCC?
gcc
przed wersją 4.8 można było zbudować kompilator C spakowany z dowolnym systemem operacyjnym (i to ograniczyłoby cię do C89 na wielu).Odpowiedzi:
To właściwie dobrze znana koncepcja zwana bootstrapowaniem . Zasadniczo istnieje gdzieś minimalna baza kodu C do zbudowania wersji GCC, która jest w stanie zbudować obecną bazę kodu GCC. Języki samo-hostingu robią takie rzeczy od dziesięcioleci.
źródło
gcc
nie może być już kompilowany przez kompilator AC. Jedyną gwarancją kompilacji gcc, którą tworzą, jest to, że gcc w wersji N można zbudować za pomocą gcc w wersji 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?
- zakłada, że nie masz dostępu do poprzednich wersji, ani nie zajmuje się innymi konsekwencjami przejścia z C na C ++ dla bazy kodu.Tworzenie kompilatora napisanego w tym samym języku, który kompiluje, nazywa się ładowaniem początkowym . Artykuł w Wikipedii opisuje wiele sposobów uruchamiania kompilatora.
Biorąc pod uwagę twoje ograniczenie, że masz tylko kod źródłowy G ++ post-4.8 i nie masz gotowych plików binarnych na platformę docelową (brak istniejącego kompilatora C ++), wówczas kompilacja G ++ można uruchomić za pomocą kompilacji krzyżowej .
Podczas ładowania kompilatora za pomocą kompilacji krzyżowej budujesz kilka wersji swojego kompilatora
Jeśli nie masz komputera (lub podobnego) do wykonania początkowych kroków, to rzeczywiście utkniesz, ale szansa na znalezienie się w takiej sytuacji i próbę uruchomienia kompilatora jest znikoma.
źródło