क्या मैं लिनक्स पर एक .exe फ़ाइल चला सकता हूँ? [डुप्लिकेट]


12

संबंधित प्रश्न:
विंडोज लिनक्स पर काम क्यों नहीं करेगा?

क्या .exeलिनक्स पर विंडोज फाइल चलाई जा सकती है?

यदि उसी वास्तुकला का उपयोग किया जाता है तो क्या यह संभव होगा? जैसे अगर दोनों प्रोग्राम X86 आर्किटेक्चर पर चलते हैं, तो क्या .exeलिनक्स पर विंडोज चलाना संभव होगा ?

जवाबों:


13

एक्साई फ़ाइल या तो लिनक्स या विंडोज के तहत निष्पादित होगी, लेकिन दोनों नहीं।

विंडोज के तहत निष्पादित करता है

यदि फ़ाइल एक विंडोज़ फ़ाइल है, तो यह लिनक्स पर अपने आप में नहीं चलेगी। इसलिए यदि ऐसा है, तो आप इसे विंडोज कम्पैटिबिलिटी लेयर (वाइन) के तहत चलाने की कोशिश कर सकते हैं। यदि यह शराब के अनुकूल नहीं है, तो आप इसे लिनक्स के तहत निष्पादित नहीं कर पाएंगे।

शुरू करने से पहले, आपको वाइन स्थापित करने की आवश्यकता होगी। आपके द्वारा वाइन को इंस्टॉल करने के लिए आवश्यक कदम लिनक्स प्लेटफॉर्म पर आपके द्वारा भिन्न होंगे। आप शायद Google "उबंटू इंस्टॉल वाइन" कर सकते हैं, उदाहरण के लिए, आप उबंटू स्थापित कर रहे हैं।

एक बार जब आप वाइन इंस्टॉल कर लेते हैं, तो आप इन कमांड को निष्पादित कर पाएंगे।

wine xxx.exe

लिनक्स के तहत निष्पादित करें

यदि आप इस फाइल को लिनक्स के तहत चलाना जानते हैं, तो आप इन कमांड को निष्पादित करना चाहेंगे:

आप अनुमतियों को बदलने के लिए ई करने के लिए सभी उपयोगकर्ताओं को अनुमति देना चाहता हूँ एक्स ecute इस फाइल (अ + x)। आप भी केवल उपयोगकर्ता को एक्स एक्स्यूट (u + x) की अनुमति दे सकते हैं

chmod a+x xxx.exe

प्रोग्राम लॉन्च करें, ./फ़ाइल को निष्पादित करने के लिए वर्तमान पथ में देखने के लिए कमांड लाइन बताता है (यदि 'वर्तमान' निर्देशिका $ PATH पर्यावरण चर में नहीं है।

./xxx.exe

11

ऑपरेटिंग सिस्टम (विंडोज या लिनक्स) अनुप्रयोगों को सेवाएं प्रदान करता है। उदाहरण के लिए, विंडोज और लिनक्स में फ़ंक्शन होंगे जो एप्लिकेशन को फ़ाइलों तक पहुंचने, नेटवर्क तक पहुंचने, स्क्रीन पर चीजों को प्रदर्शित करने के लिए कॉल कर सकते हैं, आदि।

अलग-अलग ऑपरेटिंग सिस्टम उन चीजों को करने के विभिन्न तरीके प्रदान करते हैं, इसलिए एक एप्लिकेशन जो इसे विंडोज तरीके से लिनक्स पर काम नहीं करेगा, और इसके विपरीत, भले ही सीपीयू वास्तुकला समान हो।


2
यह उत्तर सही है। यह एकमात्र कारण नहीं है (विभिन्न लोडर और निष्पादन योग्य प्रारूप भी महत्वपूर्ण हैं), लेकिन यह उनमें से एक है।
मैथ्यू फ्लेशेन

2
यह मुख्य कारणों में से एक है जिसका आप अलग-अलग ऑपरेटिंग सिस्टम पर मूल रूप से एक ही निष्पादन योग्य रन नहीं कर सकते हैं।

1
@Let_Me_Be: वास्तव में आपकी टिप्पणी सही नहीं है।
0xA3

1
@ 0xA3 यदि आप प्लेटफ़ॉर्म विशिष्ट API तक पहुँच रहे हैं, तो हाँ। लेकिन अधिकांश भाग के लिए, यह वास्तव में सच नहीं है। C या C ++ मानक लाइब्रेरी को फिर से लागू करना वास्तव में बहुत सरल है, आपको बस बग्स को फिर से लागू करने और कॉल पुनर्निर्देशित करने की आवश्यकता है। क्या बहुत काम लेता है अलग फ़ाइल प्रारूप (और मंच विशिष्ट एपीआई के बाद से उन्हें खरोंच से फिर से लागू किया जाना है)।
Šमोन तोथ

2
@ चलो, मैंने कभी नहीं कहा कि आपको चाहिए। मैं इंगित कर रहा था कि आपने "अधिकांश भाग के लिए" कहा था, प्रोग्राम प्लेटफ़ॉर्म-विशिष्ट एपीआई का उपयोग नहीं करते हैं; वास्तव में, सबसे अधिक है । यहां तक ​​कि जीटीके जैसे क्रॉस-प्लेटफॉर्म पुस्तकालयों का उपयोग करने वाले कार्यक्रम अभी भी अप्रत्यक्ष रूप से प्लेटफ़ॉर्म-विशिष्ट एपीआई का उपयोग कर रहे हैं।
मैथ्यू फ्लैशेन

8

नहीं, विभिन्न ऑपरेटिंग सिस्टम विभिन्न स्वरूपों का उपयोग करते हैं (जैसे। विंडोज पीई का उपयोग करता है जबकि लिनक्स ईएलएफ का उपयोग करता है)। साथ ही, जब संकलित किया जाता है, तो आपका प्रोग्राम देशी ओएस विधियों को कॉल करता है। जैसा कि उल्लेख किया गया है, आप वाइन का उपयोग कर सकते हैं । यह लिनक्स पर विंडोज बिन्री को चलाने के लिए सबसे अधिक कार्यक्षमता प्रदान करता है।


5

तीन प्रमुख कारण हैं।। Exe फ़ाइलें सीधे लिनक्स पर नहीं चलेंगी और एक लिनक्स निष्पादन योग्य सीधे विंडोज पर क्यों नहीं चलेगा।

  1. पहला है सिस्टम कॉल। सिस्टम कॉल, परिभाषा के अनुसार, लगभग विशिष्ट हैं। हालांकि, सभी सिस्टम कॉल समान नहीं हैं। पोर्टेबल सिस्टम कॉल (जैसे C / C ++ मानक पुस्तकालय द्वारा परिभाषित) और गैर-पोर्टेबल सिस्टम कॉल (जैसे POSIX या Microsoft द्वारा परिभाषित) हैं। सिस्टम लाइब्रेरी के साथ संकलित समय पर स्टेटिक रूप से लिंक किए गए एप्लिकेशन यह पाएंगे कि कोड का वह हिस्सा जो स्टेटिक रूप से शामिल है, संभवतः प्लेटफ़ॉर्म के अलग-अलग डिज़ाइन के कारण लक्ष्य प्लेटफ़ॉर्म में सही तरीके से निष्पादित होने का कोई मौका नहीं होगा। अनुप्रयोग जो गतिशील रूप से रनटाइम पर जुड़े होते हैं, उनमें कुछ स्थिति के साथ चलने का एक मौका होता है: यदि यह पोर्टेबल सिस्टम कॉल है, तो मूल बायनेरिज़ सिस्टम कॉल के बीच लक्ष्य प्लेटफ़ॉर्म के सिस्टम कॉल के बीच अनुवाद तालिका है; यदि यह गैर-पोर्टेबल सिस्टम कॉल है,1 , अलग-अलग प्लेटफ़ॉर्म में अलग-अलग फ़ीचर होते हैं, और कुछ फ़ीचर का दूसरे प्लेटफ़ॉर्म 2 से कोई मतलब नहीं होता है )।

    समाधान: लिनक्स में विंडोज प्रोग्राम चलाने के लिए, वाइन विंडोज सिस्टम कॉल और विंडोज सिस्टम लाइब्रेरी का कार्यान्वयन प्रदान करता है, यह पीई प्रारूप को भी पहचानता है; वाइन लिनक्स में विंडोज प्रोग्राम को फिर से चलाए बिना चला सकता है। विंडोज में लिनक्स प्रोग्राम के लिए, साइगविन विंडोज में पॉसिक्स सिस्टम कॉल का कार्यान्वयन प्रदान करता है, और यह बिना किसी स्रोत-कोड परिवर्तन के विंडोज सिस्टम पर चलने के लिए लिनक्स के लिए लिखे गए प्रोग्राम को Cygwin GCC के उपयोग से फिर से खोलने की अनुमति देता है। अधिकांश लिनक्स प्रोग्राम के खुले स्रोत की प्रकृति के कारण, बाइनरी-संगत परत प्रदान करने के वाइन के रास्ते पर जाने के बजाय इसे फिर से जोड़ना आसान है। वाइन जैसी संगतता परत प्रदान करना असंभव नहीं है, हालांकि सिग्विन का रास्ता अधिक मजबूत है और गैर-ओपन-सोर्स लिनक्स प्रोग्राम को आसानी से विंडोज पर पोर्ट करने की अनुमति देने के लिए बहुत ड्राइव नहीं है।

  2. अन्य निष्पादन योग्य प्रारूप है। Windows PE (पोर्टेबल एक्ज़ीक्यूटेबल) प्रारूप का उपयोग करता है और लिनक्स ELF (एक्ज़ीक्यूटेबल और लिंकेबल फॉर्मेट) का उपयोग करता है। निष्पादन योग्य प्रारूप में मेटाडेटा शामिल है, और यह परिभाषित करता है कि निष्पादन योग्य को प्लेटफॉर्म द्वारा कैसे लोड और निष्पादित किया जाना है।

    समाधान: पीई -> ईएलएफ या ईएलएफ -> पीई कनवर्टर लिखना पूरी तरह से संभव है; और शायद ऐसा करना बहुत कठिन नहीं होना चाहिए (चेतावनी: मैं किसी एक के वास्तविक प्रारूप से परिचित नहीं हूं)। एक और तरीका एक निष्पादन योग्य लोडर लिखना है जो पीई फ़ाइलों को समझ सकता है (जैसे शराब एक प्रदान करता है) या निष्पादन योग्य लोडर जो कि ईएलएफ फ़ाइल को समझ सकता है (मेरा मानना ​​है कि विंडोज़ का डिज़ाइन एक निष्पादन योग्य के रूप में मूल रूप से चलने वाली डबल-क्लिक करने योग्य फ़ाइल की संभावना को सीमित करता है)

  3. सिस्टम कॉलिंग कन्वेंशन कहता है। लिनक्स और विंडोज में न केवल उपलब्ध सिस्टम कॉल का एक अलग सेट होता है, इसमें एक बहुत अलग सिस्टम कॉलिंग कन्वेंशन भी होता है। लिनक्स में, सिस्टम कॉल करने के लिए आप eax / rax रजिस्टर में syscall नंबर और बाकी रजिस्टरों में तर्क देते हैं, और फिर आप 0x80 इंटरप्ट अनुरोध करते हैं। डॉस में, आप रजिस्टर में तर्कों को भी पास करते हैं, हालांकि प्रत्येक सिस्टम सेवा के लिए एक अलग से व्यवधान अनुरोध संख्या होती है ताकि आप ईआरएक्स / रैक्स में सिस्टम कॉल नंबर को पास न करें। विंडोज एनटी लिनक्स के समान है, हालांकि 0x80 के बजाय आप 0x2E अवरोध अनुरोध बढ़ाते हैं, हालांकि सिस्टम कॉल नंबर अभी भी अलग है (इसलिए आपको syscall नंबर अनुवाद तालिका और संभवतः संगतता परत की आवश्यकता है)।

    समाधान: यहां तक ​​कि जब आपके पास स्वयं-संशोधित कोड नहीं होता है या डेटा को कोड के रूप में निष्पादित करने की कोशिश करता है या अन्य पेचीदा कोड करता है, तब भी एक निष्पादन योग्य का विश्लेषण करने के लिए, सभी सिस्टम की खोज करना बहुत कठिन है। कॉल बाधित करने का अनुरोध करता है, और उन्हें लक्ष्य प्लेटफ़ॉर्म के सिस्टम कॉल में अनुवाद करता है। एक आसान तरीका एक रनटाइम सेवा प्रदान करना है जो कार्यक्रम के व्यवधानों को संभालता है और उन्हें लक्ष्य प्लेटफ़ॉर्म के सिस्टम कॉल 3 पर पुनर्निर्देशित करता है ।

कई अन्य कारण हैं, लेकिन मेरा मानना ​​है कि ये तीनों बड़े ठोकर हैं।

1 फाइलसिस्टम सुरक्षा दिमाग में आती है, लिनक्स के सुरक्षा बिट्स और विंडोज 'एनटीएफएस एसीएल के बीच अनुवाद करने का कोई तरीका नहीं है।

2 विंडोज एक प्रक्रिया को कांटा नहीं कर सकता; CreateProcess का उपयोग कुछ हद तक कांटा का अनुकरण करने के लिए किया जा सकता है, हालांकि यह कॉपी-ऑन-राइट सिमेंटिक खो देता है। विंडोज में कॉपी-ऑन-राइट प्रक्रिया बनाने का कोई तरीका नहीं है।

3 मेरा मानना ​​है कि वाइन ऐसा करती है


1

यह संभव है लुकअप वाइन


पॉल @ मुझे शराब नहीं चाहिए ... मैं प्रोग्रामिंग के बारे में बात कर रहा हूं ... संकलन के बाद मुझे एक निष्पादन योग्य मिलता है। उस निष्पादन योग्य खिड़की और लाइनक्स

1
विकिपीडिया लेख WINE की आवश्यकता क्यों है के उच्च स्तर का विवरण देता है।
पॉल व्हेलन नोव

1

केवल अगर यह .Net .exe फ़ाइल है। मैंने वीएस में एक ऐप बनाया और विंडोज के तहत संकलित किया फिर मैंने इसे लिनक्स पर चलाया

mono myapp.exe

मुझे पता है कि यह वही नहीं है जो आप खोज रहे हैं, फिर भी जवाब है कि आप लिनक्स पर कुछ एक्साई फाइलें चला सकते हैं ।


1

Win, Linux (या यहां तक ​​कि मैक) पर निष्पादनयोग्य को चलाने का एकमात्र तरीका असेंबली और OS निर्देशों के बीच किसी प्रकार की "वर्चुअल लेयर" है, मोनो के तहत इसे चलाने का लुक्स का विकल्प एक तरह से जावा को बनाना है। फ़ाइल (या यहां तक ​​कि एक एडोब एयर)।

बिल्डिंग बायनेरिज़ जो कई आर्किटेक्चर पर चलने के लिए है, जैसा कि संभव नहीं है, क्योंकि मशीन कोड ओएस और यहां तक ​​कि हार्डवेयर के लिए अत्यधिक बाइंड किया जाता है, आपको प्रत्येक सिस्टम / ओएस के लिए कई बिल्ड को परफ्यूम करना पड़ सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.