जैसा कि मैं इसे समझता हूं, सी कोड किसी की मशीन पर मशीन (असेंबली) कोड में संकलित किया जाता है, और यह एक exe फ़ाइल बन जाता है जिसे कई अलग-अलग प्रोसेसर (मशीनों) पर चलाया जा सकता है। लेकिन चूंकि विभिन्न प्रोसेसर के पास अपना अनूठा असेंबली कोड है, तो यह कोड कैसे चला सकता है? संकलित एक्सई केवल एक प्रकार के प्रोसेसर पर चलाने में सक्षम नहीं होगा?विभिन्न प्रोसेसर पर सी कोड कैसे चलाया जा सकता है?
उत्तर
जब आप मशीन कोड के लिए एक कार्यक्रम संकलन, आप एक मशीन कोड अनुदेश सेट, शायद जिसमें मशीन (यदि लागू हो) को चलाने के लिए एक विधा है, और एक प्रारूप है जो जिसका परिणाम कोड संग्रहीत किया जाता है का चयन करने के लिए है।
सभी उन विकल्पों जिस पर कोड निष्पादित किया जा सकता लक्ष्य मंच की सीमा।
अनुदेश मोटे तौर पर सेट सीपीयू के प्रकार पर निर्भर: 86 ("आईबीएम संगत"), पॉवर, एआरएम, MIPS, DEC अल्फा, मोटोरोला 68k, ... प्रत्येक सीपीयू परिवार के भीतर, वहाँ कई हैं उप-विशेषताओं और पीढ़ियों से चुनने के लिए (उदाहरण के लिए x86 के लिए, i386, एसएसई, एवीएक्स, ...) हैं। नए सीपीयू पुराने पीढ़ियों तक सीमित कोड निष्पादित करने में सक्षम हो सकते हैं, इसलिए एक सामान्य सबसेट हो सकता है।
x86 पर प्रोसेसर मोड पर्यावरण पर निर्भर करता है: एमएस-डॉस प्रोग्राम के लिए वास्तविक मोड और बूट-अप, संरक्षित मोड, विभिन्न एड्रेसिंग मोड पर चलने वाली कुछ भी कुछ स्थितियों (अवास्तविक मोड) में उपलब्ध हो सकता है ...
द्विआधारी प्रारूप को ऑपरेटिंग सिस्टम द्वारा मान्यता प्राप्त करने की आवश्यकता है, या आमतौर पर जो भी आपके पास लोडिंग तंत्र है: विंडोज़ के लिए पीई, समकालीन लिनक्स के लिए ईएलएफ, पुराने दिनों में, एक ... ऑपरेटिंग सिस्टम एकाधिक बाइनरी प्रारूपों के लिए लोडर प्रदान कर सकता है।
यह संकलन के दौरान चुनने वाले प्लेटफ़ॉर्म पैरामीटर का केवल सबसे बुनियादी स्तर है, और आपका प्रोग्राम केवल इस विकल्प पर सहमत प्लेटफ़ॉर्म पर ही चलता है। हालांकि, वास्तविक दुनिया के कार्यक्रमों के लिए कई और व्यावहारिक सीमाएं हैं, जैसे ओएस सिस्टम इंटरफ़ेस और ढांचे पुस्तकालयों की उपलब्धता, जिन्हें मिलान करने की भी आवश्यकता है। उदाहरण के लिए, लिनक्स में विंडोज पीई बाइनरी पढ़ने और चलाने में मुश्किल नहीं है, लेकिन उसमें निहित कोड लिनक्स पर समझ में नहीं आता है क्योंकि यह विंडोज-विशिष्ट सॉफ़्टवेयर इंटरप्ट्स का उपयोग करता है। हालांकि, उनको अवरुद्ध करके और अनुवाद करके, लिनक्स पर उन बाइनरी को चलाने के लिए काफी संभव है।
इसके अलावा, (विशेष रूप से) पीई फ़ाइल प्रारूप में एक फ़ील्ड है जो स्पष्ट रूप से ** कहता है ** यह किस सीपीयू के लिए है: "मशीन 'सीपीयू जो इस फ़ाइल के लिए है। निम्नलिखित सीपीयू आईडी परिभाषित हैं: .. "(https://msdn.microsoft.com/en-us/library/ms809762.aspx)। – usr2564301
_ "ओएस सिस्टम इंटरफ़ेस और फ्रेमवर्क लाइब्रेरी की उपलब्धता, जिसे मिलान करने की भी आवश्यकता है" _ मुझे लगता है कि यहां पर विचार करने के लिए महत्वपूर्ण बात है (ओपी के लिए): भले ही अधिकांश कंप्यूटर x86 CPU का उपयोग करते हैं, और वे (व्यापक रूप से) एक ही भाषा बोलो, यह अक्सर ओएस है जो संकलित कार्यक्रमों की पोर्टेबिलिटी में निर्णायक कारक है। एक विंडोज एक्सई ओएसएक्स, या लिनक्स पर किसी प्रकार के एमुलेटर या अनुवादक/रनटाइम परत के बिना नहीं चल सकता है (जैसे कि जावा को जेवीएम पर चलाने के लिए संकलित किया गया है, सीधे हार्डवेयर पर नहीं) –
@EliasVanOotegem: हाँ। उदाहरण के लिए शराब विंडोज सिस्टम कॉल को रोकता है और लिनक्स पर प्रदान करता है और उचित विंडोज लाइब्रेरीज़ (लिनक्स के लिए लागू) के साथ जहाजों को प्रदान करता है, ताकि आप लिनक्स पर विभिन्न प्रकार के विंडोज प्रोग्राम निष्पादित कर सकें। (मुझे कल्पना है कि यह मैकोज़ और बीएसडी पर भी ऐसा ही कर सकता है?) –
- 1. विभिन्न प्रोसेसर (x86 असेंबली) पर कोड चलाना
- 2. विभिन्न प्रोसेसर में पाइथन कोड चलाना
- 3. साझा पुस्तकालयों को कैसे चलाया जा सकता है?
- 4. जब कोई ऑब्जेक्ट स्कोप से बाहर हो जाता है तो कोड चलाया जा सकता है .Net?
- 5. अन्य सभी घटनाओं को संभालने के बाद कोड कैसे चलाया जा सकता है
- 6. क्यों `# आयात (" डार्ट: unittest ") 'नहीं चलाया जा सकता है?
- 7. डिवाइस पर फ्रैंक परीक्षण नहीं चलाया जा सकता है, हालांकि फ्रैंकफाईड ऐप डिवाइस पर है
- 8. क्या Node.js टॉमकैट सर्वर के भीतर चलाया जा सकता है?
- 9. प्रोजेक्ट नहीं चलाया जा सकता है - एंड्रॉइड स्टूडियो 2.0 क्रैशलिटिक्स
- 10. क्या फ्रीबीएसडी डॉकर के अंदर चलाया जा सकता है?
- 11. रेल सबमिट बटन: क्लिक करने पर बटन को एक निश्चित विधि कैसे चलाया जा सकता है?
- 12. ग्रहण के माध्यम से एसवीएन - कोड को चलाया नहीं जा सकता है मैंने
- 13. LC.exe चलाया नहीं जा सका
- 14. कार्यक्रम कितनी बार चलाया गया है? सी #
- 15. कोड जनरेशन के लिए एनोटेशन प्रोसेसर का उपयोग किया जा सकता है?
- 16. एक प्रतिक्रिया-मूल पैकेज के मूल भाग को चलाया जा सकता है और स्टैंडअलोन विकसित किया जा सकता है?
- 17. सजाए गए फ़ंक्शन के पूरा होने के बाद मुझे पाइथन सजावट कैसे चलाया जा सकता है?
- 18. आईफोन - आईओएस 5.0.1 डिवाइस पर एक्सकोड से ऐप नहीं चलाया जा सकता है, क्योंकि 5.0
- 19. एनोटेशन प्रोसेसर - क्लास को कैसे प्राप्त किया जा रहा है
- 20. क्या यह कोड मेरे प्रोसेसर को नुकसान पहुंचा सकता है?
- 21. लोकहोस्ट नहीं चलाया जा सकता: 3000: सफेद खाली पृष्ठ
- 22. मैं कैसे जांचूं कि नाक-परीक्षण से कोड चलाया जा रहा है या नहीं?
- 23. फेसबुक एसडीके के साथ नहीं चलाया जा सकता
- 24. हेरोकू के होस्टेड पोस्टग्रेस डेटाबेस पर रेल परीक्षणों पर रुबी नहीं चलाया जा सकता
- 25. विभिन्न कोरों पर विभिन्न धागे कैसे चलाएं?
- 26. विशिष्ट प्रोसेसर कोर
- 27. xmonad का लॉगआउट लेआउट घटनाओं (केवल) प्रतिक्रिया के बजाय सेट अंतराल पर चलाया जा सकता है?
- 28. तालिका इंजन = InnoDB को एक ही समय में कई तालिकाओं पर चलाया जा सकता है?
- 29. तत्व के बच्चों के संक्रमण समाप्त होने पर ट्रांज़िशनेंड ईवेंट क्यों चलाया जा सकता है?
- 30. ios7 डिवाइस पर नहीं चलाया जा सकता है: अवैध हेक्स अंक 59 त्रुटि?
कई अलग प्रोसेसर मॉडल एक ही "परिवार" का हिस्सा हो सकते हैं और उसी मशीन भाषा को साझा कर सकते हैं। –
यह एक तरह का पेट्रोल है जिस तरह से कई पेट्रोल में इस्तेमाल किया जा सकता है, लेकिन सभी कार नहीं, भले ही प्रत्येक कार का अपना इंजन हो। –
लेकिन एक एक्सई फाइल सभी विंडोज मशीनों पर नहीं चल सकती है, भले ही उनके पास एक पूरी तरह से अलग प्रोसेसर हो। – Melkor