Nắm bắt chính mình, câu hỏi này có thể sẽ xuất hiện ngây thơ và / hoặc ngu ngốc, vì tôi tương đối mới đối với hoạt động bên trong của unix như các hệ thống, và lập trình nói chung.
Sẳn sàng? Được! Tôi sẽ trải qua khoảng 3 cấp độ lố bịch, tăng dần khi tôi đi cùng.
Chúng tôi có hai hệ thống có phần cứng tương tự nhau (điểm chính là bộ xử lý, chúng ta hãy nói một bộ đôi intel core 2 tiêu chuẩn).
Một cái đang chạy (chèn distro linux của bạn vào đây: Ubuntu sẽ được sử dụng từ đó) và cái còn lại đang chạy, giả sử Mac OS X.
Một người biên dịch một chương trình tương đương, Chúng ta hãy nói một cái gì đó như:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
Mã này cực kỳ đơn giản, vì tôi chưa muốn xem xét ý nghĩa của các thư viện dùng chung.
Khi được biên dịch trên các hệ thống tương ứng. Không phải sự khác biệt chính giữa đầu ra là vấn đề của ELF so với Mach-O sao? Nếu ai đó loại bỏ từng nhị phân của định dạng, để lại một nhị phân phẳng, các hướng dẫn máy đã tháo rời có giống nhau không? (có lẽ một vài khác biệt tùy thuộc vào thói quen / xu hướng của trình biên dịch).
1.) Nếu một người phát triển một chương trình để đóng gói lại nhị phân phẳng được tạo ra từ hệ thống Ubuntu của chúng tôi, theo định dạng Mach-O, liệu nó có chạy trong hệ thống Mac OS X không? Sau đó, nếu một người chỉ có tệp nhị phân được biên dịch của chương trình được cho là ở trên và một người có công cụ thần bí này để đóng gói lại các nhị phân phẳng, liệu các chương trình đơn giản có thể chạy trên hệ thống Mac OS X không?
Bây giờ hãy để chúng tôi đưa nó một chút nữa.
Bây giờ chúng tôi có một chương trình với nguồn như:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2.) Giả sử chương trình này được biên dịch và liên kết tĩnh, liệu chương trình ma thuật của chúng ta vẫn có thể đóng gói lại nhị phân thô ở định dạng Mach-O và nó có hoạt động trên mac os X không? Xem như không cần phải dựa vào bất kỳ nhị phân nào khác, (trong đó hệ thống mac sẽ không có trong trường hợp này)
Và bây giờ cho cấp độ cuối cùng;
3.) Điều gì sẽ xảy ra nếu chúng ta sử dụng chương trình được cho là này để chuyển đổi tất cả các thư viện chia sẻ cần thiết sang định dạng Mach-O, sau đó thay vào đó biên dịch chương trình ở trên bằng liên kết động. Chương trình vẫn sẽ thành công để chạy?
Đó nên là bây giờ, rõ ràng từng bước vô lý dựa vào cơ sở trước đó, thậm chí có ý nghĩa. Vì vậy, nếu trụ cột đầu tiên bị phá hủy, tôi nghi ngờ sẽ có nhiều công đức cho các tầng còn lại.
Tôi chắc chắn sẽ không đi xa đến mức nghĩ về điều này với các chương trình có GUI. Hệ thống cửa sổ có thể sẽ là một vấn đề đau đầu khác. Tôi chỉ xem xét các chương trình dòng lệnh ở giai đoạn này.
Bây giờ, tôi mời cả thế giới sửa lỗi cho tôi, và nói cho tôi biết mọi thứ sai với dòng suy nghĩ ngớ ngẩn của tôi.