Không có vấn đề gà và trứng vì GCC được viết bằng chính C ++?


10

Kể từ phiên bản 4.8, trình biên dịch C ++ GCC (phần G ++ của nó) được viết không phải bằng C nữa mà là chính C ++. Tôi có một câu hỏi giả thuyết về điều này.

Tôi tự hỏi làm thế nào để biên dịch mã C ++ của GCC trên nền tảng mới chưa có trình biên dịch C ++. Tất nhiên, bạn có thể sử dụng các tệp nhị phân dựng sẵn được biên dịch trên các máy khác. Hoặc bạn có thể sử dụng phiên bản GCC cũ hơn được viết bằng C và biên dịch phiên bản hiện tại với nó.

Tuy nhiên, không có mã nhị phân dựng sẵn và chỉ là phiên bản mới nhất, bạn đã bị mắc kẹt, phải không? Nếu không, có những tác động khác về tình huống này được đưa ra bởi việc chuyển đổi từ C sang C ++ của dự án GCC không?


3
Tôi không chắc chắn những gì bạn đang hỏi ở đây, mặc dù bạn có thể muốn đọc về biên dịch chéo .

5
Nền tảng hoàn toàn mới sẽ không có trình biên dịch C ++ cũng như trình biên dịch C. Biên soạn chéo là câu trả lời.
doc

1
Có lẽ bạn nên đọc chuyển của GCC sang C ++ , Chuyển sang C ++ và có thể cuộc thảo luận GCC bây giờ sẽ cần C ++ để xây dựng trên reddit. Tôi không chắc chắn rằng gcctrước 4,8 có thể được xây dựng với trình biên dịch C được đóng gói với một hệ điều hành tùy ý (và điều đó sẽ hạn chế bạn đến C89 trên nhiều).

2
Tôi không hiểu điều gì đặc biệt về C ++ cho câu hỏi này, vấn đề tồn tại với C hoặc bất kỳ ngôn ngữ nào khác, phải không?
RemcoGerlich

Câu trả lời:


16

Đây thực sự là một khái niệm nổi tiếng được gọi là bootstrapping . Về cơ bản, tồn tại, ở đâu đó, một cơ sở mã C tối thiểu để xây dựng một phiên bản GCC có khả năng xây dựng cơ sở mã GCC hiện tại. Ngôn ngữ tự lưu trữ đã làm những việc như thế trong nhiều thập kỷ.


Thật ra, không. Đó không phải là trường hợp nữa (và vấn đề với câu hỏi). gcckhông thể được xây dựng bởi trình biên dịch chỉ ac nữa. Bảo đảm duy nhất với các trình biên dịch gcc mà họ thực hiện là phiên bản gcc N có thể được xây dựng với phiên bản gcc N-1.

9
@MichaelT: Nhưng một phiên bản GCC trước đó có thể được xây dựng bằng trình biên dịch C, sau đó có thể biên dịch các phiên bản sau được viết bằng C ++, đó là những gì tôi đã nói.
Mason Wheeler

Tôi cũng chỉ ra các câu hỏi trong câu hỏi: 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?- nó giả định rằng bạn không có quyền truy cập vào các phiên bản trước cũng như không giải quyết các hàm ý khác của việc chuyển đổi từ C sang C ++ cho cơ sở mã.

9

Tạo một trình biên dịch được viết bằng cùng ngôn ngữ mà nó biên dịch được gọi là bootstrapping . Bài viết trên wikipedia mô tả một số cách mà trình biên dịch có thể được khởi động.

Với hạn chế của bạn là bạn chỉ có mã nguồn G ++ sau 4,8 và không có nhị phân dựng sẵn cho nền tảng đích của bạn (không có trình biên dịch C ++ hiện tại), sau đó có thể thực hiện khởi động trình biên dịch G ++ bằng phương pháp biên dịch chéo .

Khi bootstrapping trình biên dịch sử dụng biên dịch chéo, bạn xây dựng một số phiên bản trình biên dịch của mình

  1. Trên PC của bạn, bạn cài đặt trình biên dịch C ++ (có thể là bất kỳ trình biên dịch C ++ nào, không nhất thiết phải là G ++)
  2. Sử dụng trình biên dịch đó, bạn tạo một trình biên dịch chéo G ++ có thể thực thi trên PC và tạo mã cho nền tảng đích
  3. Sử dụng trình biên dịch chéo G ++ mà bạn vừa xây dựng, bạn tạo một trình biên dịch G ++ gốc có thể chạy trên nền tảng đích và tạo mã cho nó.
  4. Bạn xong việc rồi. Bạn đã tạo một trình biên dịch C ++ cho nền tảng mới.

Nếu bạn cũng không có PC (hoặc tương tự) để thực hiện các bước ban đầu, thì bạn thực sự bị mắc kẹt, nhưng khả năng trong tình huống đó và cố gắng khởi động trình biên dịch là không đáng kể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.