क्या लिनक्स पर इंटेल सी / सी ++ कंपाइलर का उपयोग करना संभव है ताकि विंडोज पर लिंक की जाने वाली ऑब्जेक्ट फाइलें बनाई जा सकें?


12

क्यों?

आपके स्रोत के आधार पर इंटेल कंपाइलर संभावना है या सबसे निश्चित रूप से कंपाइलर x86 आर्किटेक्चर (5 से 100% निष्पादन समय में सुधार) के लिए सबसे तेज़ निष्पादनयोग्य है।

इंटेल मुफ्त के लिए एक गैर-वाणिज्यिक लाइसेंस के तहत लिनक्स के लिए अपने संकलक प्रदान करता है (मुझे लगता है कि मैंने पढ़ा है कि यह उनके पृष्ठ पर कहीं मुफ्त है: इंटेल - गैर-वाणिज्यिक सॉफ्टवेयर विकास )। छात्रों के लिए एक नि: शुल्क गैर-वाणिज्यिक लाइसेंस भी है, लेकिन यह लाइसेंस लागू नहीं है, हालांकि सभी तीन प्रमुख ऑपरेटिंग सिस्टम (प्रतिष्ठा प्रतिबंध के कारण गिरा दिया गया) के लिए उपकरण पेश किए जाते हैं।

लक्ष्य

मैं (एक गैर-छात्र के रूप में) ऑब्जेक्ट फ़ाइलों को संकलित करने के लिए गैर-वाणिज्यिक लाइसेंस के तहत संभावित निष्पादन गति में सुधार के लिए इंटेल कंपाइलर्स का उपयोग करने में सक्षम होना चाहूंगा, जो विंडोज के लिए निष्पादनयोग्य और गतिशील लिंक लाइब्रेरी बनाने के लिए जोड़ा जा सकता है (और संभवतः ओएस एक्स)

अधिक जानकारी:

इस दस्तावेज़ से मुझे जो अनुमान लगा है वह यह है कि इंटेल कंपाइलर ऑब्जेक्ट फाइल्स बनाता है जो प्लेटफॉर्म के प्रमुख कंपाइलर्स के अनुकूल होती हैं।

उप-प्रश्न:

  1. Windows और Linux (वर्तमान संस्करण) पर gcc, g ++, cl, mingw32, icc, icpc, और icl के ऑब्जेक्ट फ़ाइल प्रारूप क्या हैं?
  2. क्या लक्ष्य को पूरा करने के लिए mingw32 क्रॉस-कंपाइलर टूलचैन के कुछ हिस्सों का उपयोग किया जा सकता है?
  3. क्या मैं सही हूं कि उत्पन्न वस्तु फाइलों में मेटाडेटा मुख्य मुद्दा है?

विज्ञापन 2:
mingw32-objcopy, लिनक्स पर इंटेल कंपाइलर आउटपुट (संभवत: ईएलएफ) को Microsoft-संगत COFF (रिलेक्वेटेबल ऑब्जेक्ट फ़ाइलों के संभावित अपवाद के साथ) में परिवर्तित करने में सक्षम प्रतीत होता है। क्या कोई पुष्टि कर सकता है कि यह वास्तव में काम करता है (गैर-तुच्छ अनुप्रयोगों के लिए), कृपया?


1
+1। दिलचस्प सवाल।
नील

क्या आपने वाइन में देखा है? AFAIK, वाइन एक टूलचिन प्रदान करता है जो लिनक्स पर विंडोज निष्पादन योग्य बना सकता है; संभवतः संभवतः आप इसके साथ आइकॉन को हुक कर सकते हैं। आपको वाइन और हुक के अंदर विंडोज आइकॉन चलाने में भी कुछ सफलता मिल सकती है। मैंने इसे आज़माया नहीं है, लेकिन पर्याप्त फ़िदलिंग के साथ, मुझे लगता है कि यह संभव होना चाहिए।
तदमर्स

के अनुसार @tdammers WineHQ अगर मैं गलत नहीं हूँ toolchain लिनक्स पर विंडोज निष्पादनयोग्य का निर्माण करने, mingw32 है।
ह्यूगो

Intel फ़ोरम से उत्तर "नहीं" प्रतीत होता है: software.intel.com/en-us/forums/topic/282588
Vitor Py

@VitorBraga मैंने इस तरह के प्रश्न की व्याख्या की: "क्या इंटेल कंपाइलर सीधे क्रॉस-कंपाइल करने में सक्षम है?" इसका उत्तर "नहीं" है (यह आवश्यक विकल्प और पुस्तकालयों को याद कर रहा है, जहां तक ​​मैं बता सकता हूं), लेकिन ... कंप्यूटर वास्तुकला (IA32, AMD64) मेरे मामले में समान होगा और अगर मैं केवल विंडोज पुस्तकालयों का उपयोग करता हूं लिनक्स में प्रोग्राम को संकलित करने के लिए मैं निष्पादनीय कोड प्राप्त करने की अपेक्षा करूंगा जिसे विंडोज में निष्पादित किया जा सकता है - यदि विंडोज निष्पादन योग्य बनाने के लिए विंडोज पुस्तकालयों के साथ जुड़ा हुआ है।
ह्यूगो

जवाबों:


1

क्रॉस-कंपाइलर का उपयोग करके लिनक्स बिल्ड मशीन पर विंडोज निष्पादन योग्य बनाना संभव है। लेकिन, इंटेल ऐसे क्रॉस कंपाइलर उपलब्ध नहीं कराता है।

उप-सवालों के जवाब देने के लिए:

Windows और Linux (वर्तमान संस्करण) पर gcc, g ++, cl, mingw32, icc, icpc, और icl के ऑब्जेक्ट फ़ाइल प्रारूप क्या हैं?

ऑब्जेक्ट फ़ाइलों के लिए प्रारूप प्रभावी रूप से ऑपरेटिंग सिस्टम (या बल्कि, इसे बनाने के लिए उपयोग किए गए कंपाइलर) द्वारा निर्धारित किया जाता है। विंडोज के लिए, यह पोर्टेबल निष्पादन योग्य (पीई) प्रारूप है और लिनक्स के लिए ईएलएफ प्रारूप है।

क्या लक्ष्य को पूरा करने के लिए mingw32 क्रॉस-कंपाइलर टूलचैन के कुछ हिस्सों का उपयोग किया जा सकता है?

नहीं। प्रासंगिक हिस्सा कोड जनरेटर है, जो सही ऑब्जेक्ट प्रारूप बनाने के लिए जिम्मेदार दोनों भाग है और इंटेल कंपाइलर पर हिस्सा है जो उनके उत्पन्न कोड को गति देता है।

क्या मैं सही हूं कि उत्पन्न वस्तु फाइलों में मेटाडेटा मुख्य मुद्दा है?

यह एक मुद्दा है, लेकिन अधिक हैं। एक अधिक मौलिक समस्या संभावित अंतर है कि कैसे मापदंडों को कर्नेल और / या मानक पुस्तकालय में पास किया जाता है। IIRC, उन सम्मेलनों विंडोज और लिनक्स के बीच अलग हैं।


0

जवाब लगभग निश्चित रूप से हाँ है। मुझे पता है कि लिनक्स बॉक्स पर Windows बायनेरिज़ ( mingw32 के माध्यम से ) का संकलन आसानी से gcc का उपयोग करके संभव है - जाहिर है आप लिनक्स पर प्रोग्राम को चलाने में सक्षम नहीं होंगे (जब तक कि यह शराब के तहत काम नहीं करता है), लेकिन मुझे कई प्रोग्राम मिलते हैं विंडोज बायनेरिज़ इस तरह से।

हालाँकि, मुझे नहीं पता कि इंटेल कंपाइलर के पास इसके लिए विकल्प हैं या नहीं, मुझे लगता है कि यह करना चाहिए।

विंडोज के लिए ऑब्जेक्ट फॉर्मेट पीई है , जबकि लिनक्स के लिए इसका ईएलएफ है


Msdn के अनुसार : "कंपाइलर कॉमन ऑब्जेक्ट फ़ाइल फॉर्मेट (COFF) ऑब्जेक्ट (.obj) फाइल्स का उत्पादन करते हैं।" <br/>
ह्यूगो

ठीक है, यह काम नहीं किया। विकिपीडिया पीई के अनुसार COFF से लिया गया है और दोनों फ़ाइल स्वरूपों का उपयोग ऑब्जेक्ट फ़ाइल प्रारूप और निष्पादन योग्य फ़ाइल प्रारूप के रूप में किया जा सकता है।
ह्यूगो

0

सी कोड के साथ कुछ भी नहीं (सीधे) जो Microsoft के कस्टम कॉलिंग कन्वेंशन का उपयोग करता है, को जोड़ने के साथ, आप MinGW के उपयोग से एक मौका खड़े हो सकते हैं objcopy। मैंने इसका उपयोग असेंबल्ड ऑब्जेक्ट फ़ाइल को कनवर्ट करने के लिए किया है, लेकिन तब मुझे कन्वेंशनों को कॉल करने की चिंता नहीं थी।

मैं सिर्फ उस समय को खर्च करूंगा जब आप जीसीसी या क्लैंग के बजाय ऐसा करने की कोशिश करेंगे जो आप चाहते हैं। यदि इस तरह की गति वास्तव में महत्वपूर्ण है कि इंटेल कंपाइलर के साथ लिनक्स बाइनरी संकलित करें और यह देखने की कोशिश करें कि वास्तव में क्या, यदि कुछ भी है, तो यह आपके कोड को गति देता है। यदि आप अन्य सभी विफल होते हैं, तो आप असेंबली को पैच कर सकते हैं।


0

मैं निम्नलिखित उत्तर का प्रस्ताव करता हूं:

संदर्भ के संबंध में एक निश्चित हो सकता है (हाँ की ओर झुकाव) लेकिन एक संदर्भ के साथ।

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

अतिरिक्त विवरण: MinGW अकसर किये गए सवाल के
अनुसार, पुस्तकालयों और DLL का उपयोग करने के साथ संभावित समस्याएं हैं: "हालांकि dlls को विभिन्न विंडोज कंपाइलरों में काफी पोर्टेबल माना जाता है, लाइब्रेरी फ़ाइल (.lib या .a) के माध्यम से dll तक पहुंचना लाइब्रेरी नहीं है। फ़ाइल प्रारूप विशेष संकलक के लिए विशिष्ट हैं और जब तक संकलक इसके लिए समर्थन प्रदान नहीं करता है तब तक इसे अलग-अलग संकलक के साथ आंशिक रूप से उपयोग नहीं किया जा सकता है। "

उत्तर को पूरा करने के लिए:
उप-प्रश्न 1:

Windows और Linux (वर्तमान संस्करण) पर gcc, g ++, cl, mingw32, icc, icpc, और icl के ऑब्जेक्ट फ़ाइल प्रारूप क्या हैं?

विंडोज पर किसी भी संकलक के लिए डिफ़ॉल्ट ऑब्जेक्ट फ़ाइल प्रारूप COFF (संभवतः पीई संस्करण) है। लिनक्स पर किसी भी संकलक के लिए डिफ़ॉल्ट ऑब्जेक्ट फ़ाइल प्रारूप ईएलएफ है

उप-प्रश्न 2:

क्या लक्ष्य को पूरा करने के लिए mingw32 क्रॉस-कंपाइलर टूलचैन के कुछ हिस्सों का उपयोग किया जा सकता है?

सबसे अधिक संभावना हां (लिंकिंग भाग के लिए), लेकिन सबसे अधिक संभावना है कि आपको बहुत निष्पादन समय में सुधार नहीं मिलेगा।

उप-प्रश्न 3:

क्या मैं सही हूं कि उत्पन्न वस्तु फाइलों में मेटाडेटा मुख्य मुद्दा है?

जोड़ने के बारे में: हाँ।

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