Có thể biên dịch một hệ thống Linux đầy đủ với trình biên dịch của Intel thay vì GCC không?


26

Có lẽ có một số vấn đề tương thích?

Tôi có ấn tượng rằng đối với các hệ thống dựa trên Intel, trình biên dịch Intel có khả năng thực hiện công việc tốt hơn GCC. Có lẽ đã có một bản phân phối đã cố gắng này?

Tôi nghĩ rằng điều này có thể khá đơn giản khi sử dụng Gentoo.


4
Một số thông tin tốt ở đây, mà tôi nên tìm thấy trước đây! gentoo-wiki.info/HOWTO_ICC_and_Portage
barrymac

5
Tôi phải tự hỏi về tiền đề của bạn: làm thế nào để bạn đánh giá trình biên dịch nào "một công việc tốt hơn"? Thực thi mã nhanh hơn? Nhị phân nhỏ hơn? Thời gian biên dịch nhanh hơn?
Eli Heady

1
Tôi sẽ đánh giá nó trên mã nhanh hơn trước, nhị phân nhỏ hơn thứ hai nhưng sẽ không thực sự quan tâm nhiều đến kích thước nhị phân trừ khi nó khá ấn tượng. Có lẽ một mối quan tâm khác có thể là hiệu quả năng lượng
barrymac

Câu trả lời:


29

Bạn sẽ không thể biên dịch mọi thứ với icc. Nhiều chương trình ngoài kia sử dụng các phần mở rộng GCC cho ngôn ngữ C. Tuy nhiên, Intel đã nỗ lực rất nhiều để hỗ trợ hầu hết các tiện ích mở rộng này; ví dụ, các phiên bản gần đây của icc có thể biên dịch nhân Linux.

Gentoo thực sự là lựa chọn tốt nhất của bạn nếu bạn muốn biên dịch lại phần mềm của mình theo một cách khác thường. Các trang icc trên Gentoo wiki mô tả các rào cản chính.

Đầu tiên thực hiện cài đặt Gentoo cơ bản, và emerge icc. Không xóa icc sau miễn là bạn có bất kỳ nhị phân nào được biên dịch với icc trên hệ thống của bạn. Lưu ý rằng icc được cài đặt trong /opt; nếu đó không phải trên phân vùng gốc của bạn, bạn sẽ cần sao chép các thư viện icc vào phân vùng gốc của mình nếu bất kỳ chương trình nào được sử dụng khi khởi động được biên dịch bằng icc.

Thiết lập /etc/portage/bashrcvà khai báo các tùy chọn biên dịch yêu thích của bạn; xem wiki Gentoo để biết một kịch bản kỹ lưỡng hơn hỗ trợ xây dựng các gói khác nhau với các trình biên dịch khác nhau (điều này là cần thiết vì icc phá vỡ một số gói).

export OCC="icc" CFLAGS="-O2 -gcc"
export OCXX="icpc" CXXFLAGS="$CFLAGS"
export CC_FOR_BUILD="${OCC}"

13

Nó chắc chắn sẽ là một kinh nghiệm thú vị. Tuy nhiên, việc biên dịch lại toàn bộ bản phân phối Linux bằng trình biên dịch thay thế sẽ không thực sự đơn giản. Nhiều gói thiết yếu phụ thuộc vào GCC và các tiện ích công cụ GNU khác.

Có thể sử dụng một trình biên dịch thay thế cho các gói không yêu cầu GCC để tạo một kết hợp. Có thể thay thế các gói phụ thuộc GCC bằng các gói khác sẽ được xây dựng bằng trình biên dịch của bạn, nhưng trong hầu hết các trường hợp không có quá nhiều lựa chọn thay thế. Ở đâu có, bạn sẽ phải xác định xem những lựa chọn thay thế đó sẽ có chức năng cho mục đích sử dụng của bạn hay không.

Câu hỏi thực sự là: nó có đáng không? Nếu bạn đang cố gắng xây dựng một hệ thống nhúng, một trình biên dịch thay thế có thể tạo ra các nhị phân nhỏ hơn. Nếu bạn đang xây dựng một cụm tính toán, bạn có thể thực thi mã nhanh hơn. Nếu bạn đang xây dựng một máy tính để bàn, bạn sẽ có được trải nghiệm học tập tuyệt vời.

Tôi nghĩ cuối cùng (giả sử bạn đang xây dựng một máy tính để bàn) bạn sẽ thấy đúng như những gì nhiều người dùng phân phối nguồn cuối cùng quyết định: lượng thời gian tối ưu hóa và xây dựng và xây dựng lại vượt xa thời gian tiết kiệm bằng cách thực thi mã nhanh hơn. Điều đó không có nghĩa là nó không nên được thực hiện - nó có thể khá thú vị. Nếu bạn làm điều đó, trang web này sẽ là một nơi tuyệt vời để tìm câu trả lời và ghi lại những nỗ lực của bạn.

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.