รั้งตัวเองคำถามนี้จะดูเหมือนไร้เดียงสาและ / หรือโง่เขลาเพราะฉันค่อนข้างใหม่กับการทำงานภายในของยูนิกซ์เช่นระบบและการเขียนโปรแกรมโดยทั่วไป
พร้อมหรือยัง? ตกลง! ฉันจะผ่านความน่าหัวเราะประมาณ 3 ระดับเพิ่มขึ้นเมื่อฉันไปตาม
เรามีสองระบบที่มีฮาร์ดแวร์ที่คล้ายกัน (จุดหลักคือหน่วยประมวลผลให้เราพูด Intel Core 2 duo มาตรฐาน)
หนึ่งกำลังทำงาน (แทรกของลินุกซ์ distro ของคุณที่นี่: Ubuntu จะใช้ต่อจากนี้ไป) และอื่น ๆ ที่กำลังทำงานสมมติว่า Mac OS X
หนึ่งรวบรวมโปรแกรมที่เทียบเท่าให้เราพูดสิ่งที่ชอบ:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
รหัสนั้นง่ายมากเพราะฉันไม่ต้องการพิจารณาความหมายของไลบรารีที่แชร์
เมื่อรวบรวมในระบบที่เกี่ยวข้อง ความแตกต่างที่สำคัญระหว่างเอาท์พุทเป็นเรื่องของ ELF กับ Mach-O ไม่ใช่หรือ? หากมีใครที่จะตัดเลขฐานสองของการจัดรูปแบบออกจากไบนารีแบบแบนคำสั่งของเครื่องที่ถอดประกอบจะไม่เหมือนเดิมหรือไม่ (อาจมีความแตกต่างเล็กน้อยขึ้นอยู่กับพฤติกรรม / แนวโน้มของผู้แปล)
1. )หากมีการพัฒนาโปรแกรมเพื่อบรรจุหีบห่อไบนารีแบบแบนที่ผลิตจากระบบ Ubuntu ของเราในการจัดรูปแบบ Mach-O มันจะทำงานในระบบ Mac OS X หรือไม่? จากนั้นถ้ามีเพียงไบนารีที่คอมไพล์ของโปรแกรมที่ควรด้านบนและอีกอันหนึ่งมีเครื่องมือลึกลับสำหรับการทำ repackaging แฟลตไบนารีโปรแกรมที่เรียบง่ายจะสามารถทำงานบนระบบ Mac OS X ได้หรือไม่?
ตอนนี้ให้เรานำมันไปอีกหน่อย
ตอนนี้เรามีโปรแกรมที่มีซอร์สเช่น:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2. )สมมติว่าโปรแกรมนี้ถูกคอมไพล์และเชื่อมโยงแบบคงที่โปรแกรมเวทย์มนตร์ของเราจะยังสามารถบรรจุไบนารีแบบดิบในรูปแบบ Mach-O และทำงานกับ mac os X ได้หรือไม่? เห็นว่ามันไม่จำเป็นต้องพึ่งพาไบนารีอื่น ๆ (ซึ่งระบบ Mac จะไม่มีในกรณีนี้)
และตอนนี้สำหรับระดับสุดท้าย
3. )จะเกิดอะไรขึ้นถ้าเราใช้โปรแกรมนี้ในการแปลงไลบรารีที่ใช้ร่วมกันที่จำเป็นทั้งหมดให้เป็นรูปแบบ Mach-O จากนั้นจึงรวบรวมโปรแกรมข้างต้นด้วยการเชื่อมโยงแบบไดนามิกแทน โปรแกรมยังคงทำงานได้สำเร็จหรือไม่
ที่ควรจะเป็นสำหรับตอนนี้เห็นได้ชัดว่าในแต่ละขั้นตอนของความไร้สาระอาศัยอยู่บนฐานก่อนหน้านี้แม้จะทำให้รู้สึก ดังนั้นหากเสาแรกถูกทำลายฉันสงสัยว่าจะมีบุญมากสำหรับเทียร์ที่เหลือ
แน่นอนว่าฉันจะไม่ไปคิดเรื่องนี้ด้วยโปรแกรมที่มี GUI อยู่ในใจ ระบบ Windowing อาจจะปวดหัวทั้งหมด ฉันกำลังพิจารณาโปรแกรมบรรทัดคำสั่งในขั้นตอนนี้เท่านั้น
ตอนนี้ฉันเชิญโลกให้มาแก้ไขฉันและบอกทุกอย่างที่ผิดกับความคิดที่ไร้สาระของฉัน