2009-03-27 36 views
17

Tôi tự hỏi liệu có ai đó đã biên dịch hạt nhân Linux với một trình biên dịch khác nào đó so với gcc hay không. Hoặc nếu ai đó đã từng thử? Câu hỏi có vẻ là ngớ ngẩn hoặc học thuật, nhưng nó xuất hiện khi tôi nghĩ về câu trả lời: Are C++ int operations atomic on the mips architectureCó thể biên dịch hạt nhân Linux bằng một cái gì đó khác với gcc

Có vẻ như tính nguyên tử của một số hoạt động không chỉ phụ thuộc vào kiến ​​trúc CPU mà còn trên trình biên dịch đã sử dụng. Vì vậy, tôi tự hỏi, nếu trong thế giới Linux một số trình biên dịch khác hơn là gcc thậm chí tồn tại.

+0

Tóm lại, vâng .. nhưng tại sao? –

+0

Tôi tự hỏi nếu một số mềm viết cho một số kiến ​​trúc cpu có thể ngừng hoạt động chính xác khi được biên dịch với trình biên dịch khác nhau (có lẽ có, vì vậy tôi muốn biết xác suất lớn như thế nào là một số trình biên dịch gcc khác sẽ được sử dụng cho Linux). –

+0

clang cụ thể: https://unix.stackexchange.com/questions/17972/is-there-a-linux-distro-compiled-with-clang-llvm –

Trả lời

12

Linux rõ ràng phụ thuộc vào một số gcc extensions, vì vậy bất kỳ trình biên dịch nào khác phải tương thích với các phần mở rộng cần thiết, trong trường hợp đó.

Đây không phải là "không", vì tất nhiên là không thể cho một nhà cung cấp/nhà phát triển trình biên dịch riêng biệt để theo dõi các phần mở rộng của gcc, chỉ một điểm dữ liệu có thể giúp bạn tìm kiếm.

+0

Một số phần mở rộng ** không có giấy tờ ** gcc được các nhà phát triển linux sử dụng bởi vì "nó chỉ hoạt động và không có bất kỳ cảnh báo nào cho VLAIS" ngay cả với '-ansi -padantic' (gcc sẽ bark trên nó chỉ với ít được sử dụng' -pedantic-errors', [nhờ Lundin] (http: // stackoverflow.com/a/14629651/196561)). – osgx

+1

Và có dự án LLVMLinux thành công của Linux Foundation và Behan Webster trong năm 2013-2014: http://llvm.linuxfoundation.org/ để xóa gcc-isms tồi tệ nhất từ ​​nhân Linux vanilla. – osgx

5

Trình biên dịch của IBM đã có thể thực hiện một số phiên bản Linux trước đây, nhưng hiện tại tôi không chắc chắn về cách IBM tối ưu hóa hạt nhân theo hướng dẫn. Tất cả những gì tôi biết là, họ đã xây dựng nó.

Vì Linux là tự lưu trữ (với libc của chính nó) và đã được phát triển từ đầu với gcc (và trình biên dịch chéo gcc), loại ngớ ngẩn của nó để sử dụng bất kỳ thứ gì khác. Tôi nghĩ chủ yếu, chơi tốt với các macro tiền xử lý và tối ưu hóa được hướng dẫn là trở ngại lớn nhất (thậm chí không đi vào khí thải), vì GNU đã cơ bản viết cuốn sách ở trên và mở rộng nó. Ngoài ra, Linux đưa ra các tối ưu hóa để làm việc với gcc, chẳng hạn, không bị bắt bằng cách sử dụng 'dễ bay hơi' trong hạt nhân mà không có lý do chính xác. Sử dụng nội tuyến và thực sự có trình biên dịch đồng ý là một thách thức khác.

Linus là người đầu tiên gọi GCC là & * # $ lỗ, giúp cho trình biên dịch tốt hơn.

Đây là lý do tại sao chúng tôi có cuộc tranh luận GNU/Linux tuyệt vời.

8

Đã có một số nỗ lực (và patches) để biên dịch phiên bản đầu của hạt nhân 2.6 với icc.

+2

Gần đây hơn, (25 tháng 2 năm 2009) http://www.linuxjournal.com/content/linuxdna-supercharges-linux-intel-cc-compiler –

+0

Intel thực sự là người duy nhất cố gắng để có được hạt nhân để biên dịch với trình biên dịch khác . – supercheetah

+0

Dunno Tôi khá chắc chắn rằng tôi quản lý để xây dựng hạt nhân với icc (tôi không thể nhớ nếu nó là 2,6 hoặc 2,4 mặc dù) –

9

Tại một số điểm, tcc sẽ xử lý và run nguồn nhân Linux. SO đó sẽ là một có, tôi đoán.

:: Hat tip để ephemient trong các ý kiến. ::

+2

http://bellard.org/tcc/tccboot.html "TCCBOOT là một bộ nạp khởi động có thể biên dịch và khởi động hạt nhân Linux trực tiếp từ mã nguồn * của nó *. " Có, tcc đã có thể xây dựng một hạt nhân Linux chạy được tại một số điểm. – ephemient

+0

@ephemient: Tôi chưa bao giờ để ý điều đó. Cảm ơn. – dmckee

3

Nhiều, rất nhiều, nhiều năm trước đây, nó đã thực sự thể compile the kernel with g++, và như xa như tôi nhớ một phần của động cơ là vì C++ đã mạnh kiểm tra kiểu, không nhất thiết phải có g ++ để tạo các tệp đối tượng. Nhưng như Neil Butterworth đã chỉ ra, Linus là not particularfond of C++ và không có khả năng là điều này sẽ có thể trở lại.

-3

tôi đoán phi kỹ thuật: Linux Kernel không thể hiện() được biên dịch với bất kỳ trình biên dịch khác hơn là trình biên dịch GNU, gcc.

Tôi nói điều này trên cơ sở đó tôi đã nghe Richard Stallman, với một số niềm tin, nói Linux nên được gọi là GNU/Linux vì hạt nhân là "chỉ có 1 phần của hệ điều hành" và tôi m đoán anh ta sẽ không thể nói điều này nếu hạt nhân không phụ thuộc vào GNU (ví dụ: một tấn thiết bị nhúng chạy một hệ điều hành Linux mà không cần bất kỳ phần mềm GNU nào).

Như tôi đã nói, chỉ là một phỏng đoán, cho tôi biết nếu tôi sai ...

+0

Sai. :) Xem các câu trả lời khác. – Arafangion

+2

RMS đang đề cập đến các lõi của GNU và các tiện ích khác của người dùng. –

1

tôi chỉ là bây giờ đang làm việc trên biên dịch Linux kernel sử dụng Open64 cho MIPS archtecture, và một số kẻ khác được bây giờ chỉ cần làm việc cho làm Open64 có thể xây dựng cho X86 vòm. Bây giờ hạt nhân có thể chạy một phần, và vẫn chạy lỗi không thành công.

Tuy nhiên đối với vấn đề nguyên tử, ít nhất tôi đã không nghĩ ra điều đó. Và tôi không nghĩ rằng nó thực sự là một lý do problem.The là: kernel

  1. Linux đã được một tập hợp các mã nguồn, mà thành công có thể xây dựng với GCC, vì vậy nó chỉ là vấn đề của trình biên dịch nếu nó không thể xây dựng nó, hoặc hạt nhân được xây dựng chạy không thành công. Nếu một trình biên dịch muốn xây dựng thành công hạt nhân Linux, nó phải tuân theo GNU C Extension, và phần mở rộng này sẽ cho một sự giải thích rõ ràng về hoạt động nguyên tử là gì, do đó biên dịch như vậy chỉ cần tạo mã theo điều này. sự mở rộng.

Các vấn đề liên quan