GCC C ++ 'da yazıldığından beri tavuk ve yumurta sorunu yok mu?


10

4.8 sürümünden bu yana, C ++ derleyicisi GCC (G ++ kısmı) artık C'de değil, C ++ 'da yazılmıştır. Bu konuda varsayımsal bir sorum var.

Henüz C ++ derleyicisi olmayan yeni bir platformda GCC'nin C ++ kodunu nasıl derleyeceğimi merak ediyorum. Tabii ki, diğer makinelerde derlenmiş önceden oluşturulmuş ikili dosyaları kullanabilirsiniz. Veya C ile yazılmış eski bir GCC sürümünü kullanabilir ve geçerli sürümü onunla derleyebilirsiniz.

Ancak, önceden oluşturulmuş ikili dosyalar ve sadece en yeni sürüm olmadan, sıkışıp kaldınız, değil mi? Değilse, bu durum üzerinde GCC projesinin C'den C ++ 'ya geçişle ortaya çıkan başka etkiler var mı?


3
Burada ne istediğinden emin değilim ama çapraz derleme hakkında okumak isteyebilirsin .

5
Tamamen yeni platformda C ++ derleyicisi veya C derleyicisi bulunmayacak. Çapraz derleme cevaptır.
doc

1
Muhtemelen okumalısınız C GCC hareketini ++ , C Hareketli ++ ve muhtemelen tartışma GCC şimdi yapı C ++ gerekir reddit'te. gcc4.8'den önce keyfi bir işletim sistemi ile paketlenmiş C derleyicisi ile inşa edilebileceğinden emin değilim (ve bu sizi birçoğunda C89 ile sınırlar).

2
Bu soru için C ++ ile ilgili özel olanı anlamıyorum, sorun C veya başka bir dilde var, değil mi?
RemcoGerlich

Yanıtlar:


16

Bu aslında önyükleme adı verilen iyi bilinen bir kavramdır . Temel olarak, bir yerlerde, mevcut GCC kod tabanını oluşturabilen bir GCC sürümünü oluşturmak için minimal bir C kod tabanı vardır. Kendini barındıran diller on yıllardır böyle şeyler yapıyor.


Aslında hayır. Artık durum böyle değil (ve soruyla ilgili sorun). gccartık sadece ac derleyici tarafından inşa edilemez. Gcc derlemelerinin tek garantisi, gcc sürüm N'nin gcc sürüm N-1 ile oluşturulabileceğidir.

9
@MichaelT: Ama GCC önceki bir sürümü olabilir o zaman dedim ne C ++, yazılı sonraki sürümleri derlemek bir C derleyicisi ile inşa edilecek.
Mason Wheeler

Ayrıca sorudaki sorulara da işaret ediyorum: 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?- önceki sürümlere erişiminiz olmadığını varsayar ve kod temeli için C'den C ++ 'ya geçişin diğer sonuçlarını ele almaz.

9

Derlediği dil ile yazılan bir derleyici oluşturmaya bootstrapping denir . Wikipedia makalesinde, bir derleyicinin önyüklenebilmesi için bir çok yol açıklanmaktadır.

Yalnızca 4.8 sonrası G ++ kaynak koduna ve hedef platformunuz için önceden oluşturulmuş ikili dosyalara (mevcut C ++ derleyicisi yok) sahip olduğunuz kısıtlaması göz önüne alındığında, G ++ derleyicisini önyükleme çapraz derleme yoluyla yapılabilir .

Derleyiciyi çapraz derleme kullanarak önyüklerken, derleyicinizin çeşitli sürümlerini oluşturursunuz

  1. PC'nize bir C ++ derleyicisi yüklersiniz (herhangi bir C ++ derleyicisi olabilir, G ++ olması gerekmez)
  2. Bu derleyiciyi kullanarak bilgisayarda çalışabilen ve hedef platform için kod üreten bir G ++ çapraz derleyicisi oluşturursunuz
  3. Yeni oluşturduğunuz G ++ çapraz derleyicisini kullanarak, hedef platformda çalışabilen ve bunun için kod oluşturabilen yerel bir G ++ derleyicisi oluşturursunuz.
  4. Bitirdiniz. Yeni platform için bir C ++ derleyicisi oluşturdunuz.

İlk adımları uygulayacak bir PC'niz (veya benzeri) yoksa, o zaman gerçekten sıkışmışsınızdır, ancak bu durumda olma ve bir derleyiciyi önyüklemeye çalışma şansı ihmal edilebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.