क्या ओएस एक्स कंप्यूटर से एक तेज बाइनरी संकलित करना संभव है ताकि यह एक अतिरिक्त बाइनरी के बिना लिनक्स चलाने वाले सर्वर पर चलाया जा सके, जिसे गतिशील रूप से लिंक करने की आवश्यकता है?
संक्षिप्त उत्तर? निश्चित रूप से यह है! जब आप अपना दिल डालते हैं तो कुछ भी संभव है!
क्या यह कुशल है? स्वाभाविक रूप से, नहीं।
जबकि मुझे यकीन है कि यहां हर किसी को क्या एक संकलक करता है, इस सवाल के लिए और उन की अपनी नवीनतम, एक संकलक एक आवेदन है कि मानव पठनीय कोड धर्मान्तरित और एक बाइनरी फ़ॉर्मेट में यह नक्शे है से परिचित है कर रहा हूँ कि एक कंप्यूटर समझ सकता है। हालांकि यह उल्लेखनीय होना चाहिए कि सभी कंप्यूटर समान नहीं हैं। प्रत्येक कंप्यूटर ऑपरेटिंग सिस्टम के मुकाबले एक अलग द्विआधारी मैपिंग होता है, इसलिए एक सरल ऑपरेशन जैसे मूल्यों की प्रतिलिपि एक मशीन पर 1010 और दूसरे पर 0101 के रूप में व्यक्त की जा सकती है। जैसा कि पहले कई सवाल में पहले कहा, and for example this one, कई प्रोग्रामिंग भाषाओं मशीनों की एक किस्म भर में बनाने योग्य रहे हैं, लेकिन क्योंकि प्रत्येक कंप्यूटर एक अलग द्विआधारी मानचित्रण है उनमें से बहुत कुछ पोर्टेबल उन्हें भर में कर रहे हैं।
~~~~~~~ तो हम इसे कैसे ठीक कर सकते हैं? ~~~~~~~
- खैर समाधान के एक नंबर इसे ठीक करने के देखते हैं। सबसे स्पष्ट विधि है कि आप अपने पर्यावरण को लक्षित वातावरण और अपने दिल की सामग्री में अपना प्रोग्राम बनाएं। आपने स्पष्ट रूप से पहले से ही वर्चुअल मशीन के माध्यम से किया है और यह आमतौर पर डेवलपर करेगा। यह अब तक का सबसे आसान समाधान है लेकिन उस प्रश्न के उद्देश्य को हरा देता है जहां आप अपनी ओएसएक्स मशीन से बनाना चाहते हैं।
इससे पहले आपने कहा था कि आपने लोगों को लिनक्स मशीनों पर विंडोज प्रोग्राम संकलित करने के बारे में बात करते हुए सुना है। Cygwin विंडोज़ फ्रेमवर्क प्राप्त करने के उद्देश्य से एक विकास मंच है जो आमतौर पर लिनक्स मशीनों पर मौजूद नहीं होता है और कई प्रोग्राम विंडोज़ फ्रेमवर्क के साथ दिमाग में बनाया जा सकता है। हालांकि, इसके सभी काम बाइनरी जोड़ रहे हैं ताकि संकलक के पास कुछ उचित स्थान हों, जब विंडो केवल विन्यास कॉन्फ़िगरेशन में पाए जाते हैं। यह सब करने के लिए एक कार्यक्रम के लिए सफलतापूर्वक बंदरगाह पर आवश्यक बाइनरी कॉन्फ़िगरेशन शुरू कर रहा है। यह दूसरे विकल्प में संबंध है।
- दूसरा एक संकलक आता है जो क्रॉस प्लेटफार्म संकलन का समर्थन करता है। जबकि मैं वर्तमान में कंपाइलर्स से अपरिचित और/या अपरिचित हूं, यह तकनीकी रूप से एक वैध समाधान है, लेकिन क्या मैं इसे विश्वसनीय कहूंगा? शायद ऩही। यदि आप कुछ भी पर अधिक काम जोड़ रहे हैं तो आपके कंपाइलर को न केवल एक कंप्यूटर प्रोग्राम के लिए एक कंप्यूटर प्रोग्राम के सिंटैक्स को सही तरीके से मैप करना होगा, इसे को नई बाइनरी में जोड़ने का समय बर्बाद करना होगा। इसके अतिरिक्त आपको कंपाइलर को इन लिंकिंग को याद रखना होगा जो इस संकलक के लिए मेमोरी स्पेस को अधिक बर्बाद कर सकता है।
फिर भी, इस तरह के सिस्टम और दूर के बीच है और क्या उसके काम करने की गारंटी कितनी अच्छी तरह compilers मेंटेनर उनके सामान जानता है पर निर्भर करता है, कि कितने समय में वे इसे अद्यतन आदि आदि और संभावना है कि वे भी प्रदर्शन किया कुछ कर रहे हैं पहली जगह में बाइनरी के मैपिंग को सही करने के लिए कुछ ऐसा नहीं है जिसे मैं अपना जीवन दूँगा।
- तीसरा और शायद सबसे आदर्श समाधान कंटेनर प्रौद्योगिकियों जैसे docker में देखना है। उनके कंटेनर आपके ऐप को बनाने और इसे बनाने के तरीके के बारे में कुछ भी बदलने या संशोधित किए बिना इसे नए मशीनों पर बंद करने के लिए अनिवार्य रूप से तरीके हैं। बस एक बनाएं, इसे एक कंटेनर में स्टोर करें, इसे अपनी पसंद की मशीन पर बंद करें और इसे अपने वर्तमान प्रोजेक्ट में एकीकृत करें। इसके बारे में सोचने के लिए आओ, डॉकर जैसे कंटेनर सिस्टम को उस चीज़ को रोकने के लिए बनाया गया था जिसे आप वर्तमान में अनुभव कर रहे हैं, जहां आपके पास एक मशीन पर एक स्रोत कोड काम कर रहा है लेकिन कोई और जगह नहीं है। डॉकर की तरह कुछ भी किसी भी मशीन पर आपके कोड को प्रत्येक नई मशीन के लिए पुन: संकलित किए बिना चलाने में सक्षम होगा।
डोकर कंटेनर संचार, आवेदन उदाहरण के लिए कंटेनर के लिए एक दिलचस्प रूपरेखा प्रदान करता है और एक काफी सरल प्रलेखन कि यह को देखने के लिए अगर अपनी परियोजना अपने हिस्से के कुछ डोकर में पोर्ट हो सकता था देखने के लिए सार्थक होगा है।
यह कहा जा रहा है कि आप जिस समस्या का सामना कर रहे हैं उसे ठीक करने के कई तरीके हैं, इसलिए जब आप एक सॉफ्टवेयर इंजीनियर हैं, तो यह आपके ऊपर है कि यह आपके प्रोजेक्ट को संभालने का सबसे आदर्श तरीका होगा।
// संपादित //
इस संपादित करेंगे एक बेहतर प्रतिक्रिया एक बार ड्रॉप-मृत थक नहीं im किया जाना है।
शायद मैं आपके प्रश्न को गलत समझता हूं, लेकिन लिनक्स बाइनरी (एल्फ़) और मैक बाइनरी (माच-ओ) [संगत नहीं हैं] (https://stackoverflow.com/questions/9439436/is-a-linux-executable- संगत-साथ-os-x)। – TheDarkKnight
हां, जाहिर है वे नहीं हैं। क्रॉस संकलन का मतलब है एक ओएस से एक अलग लक्ष्य ओएस में संकलन। उदाहरण के लिए, काम करने के लिए एक लिनक्स बॉक्स, और एक विंडोज संगत exe संकलन। मैंने पहले ऐसा नहीं किया है, लेकिन मैंने लोगों को इस तरह की चीजें करने के बारे में बात की है, इसलिए मुझे लगता है कि यह संभव है। – hasen
मैंने यह नहीं सोचा था कि यह मूल ऐप्पल कंपाइलर्स के साथ ओएस एक्स पर संभव है, लेकिन यह प्रश्न ब्याज के साथ देखेगा। – TheDarkKnight