Trước tiên, tôi muốn ghi lại rằng câu hỏi này có liên quan đến trường học/bài tập về nhà.Khả năng tương thích tệp đối tượng C giữa các máy tính
Giả sử máy tính CP1 và CP2 đều dùng chung một hệ điều hành và ngôn ngữ máy. Nếu một chương trình C được biên dịch trên CP1, để di chuyển nó sang CP2, cần phải chuyển mã nguồn và biên dịch lại trên CP2 hay đơn giản là chuyển các tệp đối tượng.
Câu trả lời ruột của tôi là các tệp đối tượng phải đủ. Mã C được dịch thành assembly bởi trình biên dịch và được lắp ráp thành mã máy bởi trình biên dịch. Bởi vì kiến trúc chia sẻ cùng một mã máy và hệ điều hành, tôi không thấy vấn đề gì.
Nhưng càng suy nghĩ về điều đó, tôi càng bắt đầu cảm thấy bối rối hơn.
Câu hỏi của tôi là:
a) Kể từ khi giới thiệu nó cho đối tượng tập tin và không thực thi, tôi giả định rằng không có sự liên kết. Liệu có bất kỳ vấn đề nào xuất hiện khi liên kết trên CP2?
b) Có vấn đề gì nếu mã sử dụng chuẩn C11 trên CP1 nhưng trình biên dịch duy nhất trên CP2 là C99? Tôi giả định điều này là không liên quan khi mã đã được biên dịch/lắp ráp.
c) Câu hỏi không chỉ định thư viện được liên kết/chia sẻ động. Vì vậy, điều này sẽ chỉ thực sự hoạt động nếu chương trình không phụ thuộc vào các tập tin .dll/.so/.dylib, hoặc những người khác cũng sẽ được yêu cầu trên CP2.
Tôi cảm thấy như có rất nhiều gotchas, và xem xét làm thế nào mơ hồ câu hỏi là bây giờ tôi cảm thấy rằng nó sẽ được an toàn hơn để chỉ đơn giản là biên dịch lại.
Halp!
distcc, sao chép tệp đối tượng giữa các máy tính, đề xuất sử dụng cùng một phiên bản trình biên dịch trên tất cả các nút, ngay cả đối với ngôn ngữ C. – aschepler