2011-11-24 76 views
12

Có thể cho gcc, được cài đặt trên fedora 16, để biên dịch chéo cho một CPU khác không, nói SPARC? Tôi đã xây dựng một sự hiểu biết nhất định, cần một số chuyên gia để sửa tôi nếu tôi sai. Các hệ điều hành khác nhau khác nhau bởi các cuộc gọi hệ thống mà chúng sử dụng để truy cập hạt nhân hoặc hoàn toàn bằng hạt nhân mà chúng sử dụng. IS CORRECT NÀY? các hạt nhân khác nhau hiểu các hệ thống khác nhau để truy cập phần cứng cơ bản. các tệp nhị phân hoặc tệp thực thi hoặc chương trình là gì, nhưng chỉ là một loạt các cuộc gọi hệ thống. do đó mọi hệ điều hành đều có thực thi riêng của nó. một thực thi có nghĩa là để chạy trên cửa sổ vết thương không chạy trên Linux. bằng cách biên dịch mã nguồn của bất kỳ tệp thực thi nào của windown, chúng tôi có thể tạo tệp thực thi cho các hệ điều hành khác. từ PLATFORM có nghĩa là hệ điều hành. POSIX là các tiêu chuẩn thiết kế nhất định cho các hệ điều hành giống UNIX. chúng tôi thường xuyên biên dịch cho các hệ điều hành khác nhau. NHƯNG chúng ta có thể vượt qua biên dịch cho phần cứng khác nhau không? ví dụ, trong trường hợp của một vi điều khiển mà không có một hệ điều hành?có thể gcc cross biên dịch cho CPU khác nhau?

+0

Lần cuối cùng tôi cần một trình biên dịch chéo, tôi thấy hướng dẫn này hữu ích: http://linux.bytesex.org/cross-compiler.html – sarnold

+0

@Saurabh: Tôi đã viết một hướng dẫn nhỏ về việc có được trình biên dịch chéo cho Sparc và chạy tệp thực thi trên trình giả lập Qemu. Bạn có thể thấy nó hữu ích. : https: //www.ee.iitb.ac.in/course/~nehak/SparcQemu.html –

Trả lời

11

Không. Bạn không thể sử dụng gcc gốc máy (x86) để biên dịch tệp chương trình cho một kiến ​​trúc khác. Đối với điều đó bạn yêu cầu một cross-compiler-gcc dành riêng cho kiến ​​trúc bộ vi xử lý đó.

Hiểu biết của bạn về các cuộc gọi hệ thống dành cho hệ điều hành là chính xác. Mỗi hệ điều hành có một bộ gọi hệ thống riêng được thư viện sử dụng. Các thư viện này ở cuối sẽ được dịch sang ngôn ngữ máy cho bộ vi xử lý.

Mỗi kiến ​​trúc bộ vi xử lý có bộ chỉ lệnh riêng của nó biết là Kiến trúc bộ lệnh (ISA). Vì vậy, khi một chương trình được viết bằng ngôn ngữ cấp cao (như C) được biên dịch, nó sẽ được chuyển đổi thành ngôn ngữ máy từ ISA của nó. Công việc này được thực hiện bởi trình biên dịch (gcc). Trình biên dịch sẽ chỉ dành riêng cho một kiến ​​trúc bộ vi xử lý. Ví dụ gcc dành cho bộ vi xử lý x86. Vì vậy, nếu bạn muốn một trình biên dịch cho bộ vi xử lý khác nhau trong máy x86 của bạn, bạn nên đi cho một trình biên dịch chéo của bộ vi xử lý đó.

2

Bạn sẽ phải tạo phiên bản như vậy. Đó là một phần của quá trình chuyển gcc sang nền tảng mới. Bạn xây dựng một phiên bản mà biên dịch chéo, sau đó bạn biên dịch chéo phiên bản đó, sau đó bạn kiểm tra phiên bản đó trên nền tảng mới, gỡ lỗi, rửa sạch và lặp lại.

+0

Bạn có ý nói rằng tôi chỉ có thể tạo phiên bản gcc-SPARC trên máy intel của mình. Nhưng chỉ có thể chạy và kiểm tra nó trên SPARC? – KawaiKx

+0

@Saurabh Không, tôi không có ý nói gì cả. Tôi muốn nói chính xác những gì tôi đã nói. Bạn có thể xây dựng một trình biên dịch chéo cho SPARC trên Intel, chạy nó trên Intel, sử dụng nó để biên dịch chính nó và chạy kết quả trên SPARC. – EJP

+0

o.k .. vì vậy tôi có thể xây dựng, cài đặt và chạy trình biên dịch cho một CPU khác trên máy intel của tôi. Chỉ bắt được, đầu ra chỉ có thể được chạy và thử nghiệm trên CPU mục tiêu, đó là khá nhiều logic .. cảm ơn thời gian và sự kiên nhẫn của bạn .. – KawaiKx

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