का उपयोग करते हुए विंडोज पर लाइब्रेरी का निर्माण करते समय लक्ष्य ओएस संस्करण को सही तरीके से कैसे सेट करें मैं सीएमके (एनएमके जनरेटर का उपयोग करके विशेष रूप से विंडोज प्लेटफॉर्म पर सी ++ 11 फीचर्स के साथ विजुअल सी ++ 2013 कंपाइलर का उपयोग कर क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी का निर्माण कर रहा हूं।) निर्माण प्रणाली के लिए। मैं विंडोज 7 का उपयोग कर रहा हूं।विजुअल सी ++ कंपाइलर
मेरी लाइब्रेरी केवल विंडोज 8/7 में उपलब्ध कुछ फ़ंक्शंस/एनम वैल्यू/स्ट्रक्चर सदस्यों का उपयोग करती है।
मैं विंडोज एक्सपी, विंडोज विस्टा, विंडोज 7 और विंडोज 8/8.1 ओएस संस्करणों और x86, x64 और बांह आर्किटेक्चर के लिए लाइब्रेरी बनाने में सक्षम होना चाहता हूं, यानी एक ऐसा निर्माण नहीं जो सिर्फ विंडोज एक्सपी को लक्षित करता है और हर जगह काम करता है , लेकिन कई अलग-अलग विशिष्ट ओएसई को लक्षित करने में कई अलग-अलग निर्माण होते हैं, क्योंकि नए ओएस संस्करणों में मेरी लाइब्रेरी प्रदान करने वाली अधिक उपयोगी सुविधाएं होती हैं।
मेरे प्रश्न हैं:
मैं किसी विशिष्ट OS संस्करण (अर्थात एक्सपी, विस्टा, 7, 8, 8.1, आदि) को लक्षित करने के संकलक बताऊँ?
मैं एक विशिष्ट आर्किटेक्चर (यानी x86, x64, arm, आदि) को लक्षित करने के लिए संकलक कैसे कहूं?
क्या होता है यदि मैं केवल विंडोज 8/7 में उपलब्ध फ़ंक्शंस/एनम वैल्यू/स्ट्रक्चर सदस्यों का उपयोग करता हूं लेकिन विंडोज लाइब्रेरी को लक्षित करने वाली अपनी लाइब्रेरी का निर्माण करता हूं? क्या संकलक मुझे चेतावनी देगा कि ऐसी चीजें विंडोज एक्सपी पर मौजूद नहीं हैं? या यह वास्तव में संकलित होगा लेकिन विंडोज एक्सपी सिस्टम पर चलाने में असफल रहा?
जब मैं विंडोज एक्सपी के लिए संकलित करता हूं, तो मैं इसे कैसे बना सकता हूं, मेरा कोड उन चीजों पर छोड़ देता है जो Windows XP (Windows 7/8 फ़ंक्शंस और ऐसे) में मौजूद नहीं हैं?
क्या इससे कोई फर्क पड़ता है कि मैं विभिन्न ओएस संस्करणों को लक्षित करते समय किस विंडोज एसडीके संस्करण का उपयोग करता हूं? ऐसा लगता है कि मैंने 8.1, 8.0 और 7.1 विंडोज एसडीके स्थापित किए हैं। क्या यह ठीक है अगर मैं हमेशा विंडोज एक्सपी को लक्षित करते समय भी नवीनतम एसडीके संस्करण का उपयोग करता हूं?
यहाँ कुछ जवाब मैंने पाया है, जो मुझे यकीन है कि नहीं कर रहा हूँ कर रहे हैं सही है या पूरा कर रहे हैं:
मैं सिर्फ
_WIN32_WINNT
निर्धारित करने की आवश्यकता है औरWINVER
appropriate values for the target system को परिभाषित करता है और बस इतना ही, मैं ' इसके अलावा कुछ भी सेट करने की आवश्यकता नहीं है, मेरा आवेदन केवल उस सिस्टम के साथ निर्दिष्ट सिस्टम (यानी विंडोज एक्सपी) पर चलाएगा।-
- मैं जब साथ संकलक वातावरण चर की स्थापना उपयुक्त विकल्प का उपयोग करने की आवश्यकता "C: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 12.0 \ कुलपति \ vcvarsall.bat", यानी "C: \ प्रोग्राम फ़ाइलें (x86) \ 64 विजुअल स्टूडियो 12.0 \ VC \ vcvarsall.bat amd64 "64 बिट के लिए।
मुझे लिंकर को appropriate
/SUBSYSTEM
value निर्दिष्ट करने की आवश्यकता है, यानी/SUBSYSTEM:WINDOWS,5.02
या/SUBSYSTEM:WINDOWS,6.00
x64 के लिए। लेकिन5.02
और6.00
के बीच क्या अंतर है? दो मान एक ही चीज़ (64-बिहार) क्यों निर्दिष्ट करते हैं?5.01
और6.00
के लिए वही, वे दोनों 32-सीधाई क्यों निर्दिष्ट करते हैं? मैं कल्पना करता हूं कि 64/32 बिट के लिए एक सिंगल वैल्यू पर्याप्त होगा।- उन मूल्यों (
5.01
,5.02
और6.00
)WINVER
से से मंच मूल्यों के समान दिखाई (1)।क्या वे आर्किटेक्चर के अलावा लक्ष्य ओएस भी सेट करते हैं? लेकिनWINVER=502
से (1) का उपयोग विंडोज सर्वर 2003 को लक्षित करने के लिए किया जाता है, जिसे विकिपीडिया के अनुसार 64-बिट और 32-बिट संस्करणों में रिलीज़ किया गया था, लेकिन यहां 5.02 कड़ाई से 64-बिट के लिए खड़ा है, जो समझ में नहीं आता है .. ।
- उन मूल्यों (
संकलक संकलित करने के लिए क्योंकि
WINVER
से परिभाषित (1) कार्य करता है और सामान OS को लक्षित में मौजूद नहीं (विंडोज हेडर फाइल उपयोग कि#ifdef
चीजों को परिभाषित) शामिल नहीं होंगे विफल हो जाएगा।मुझे
#ifdef
WINVER
पर आधारित अपने कोड में, जैसे कि विंडोज हेडर करते हैं, और आवश्यक होने पर अनुपलब्ध कार्यक्षमता के विकल्प प्रदान करते हैं।पता नहीं।
ध्यान दें कि मैं विजुअल स्टूडियो आईडीई का उपयोग नहीं कर रहा हूं, इसलिए मुझे आईडीई में विकल्प एक्स सेट करने के लिए कहना थोड़ा सा अर्थहीन है।
मैं लिनक्स विकास से आ रहा हूं, इसलिए विंडोज़ चीजें मेरे लिए थोड़ी नई हैं।
जब विंडोज एक्सपी के लिए बिल्डिंग, मैं विंडोज 8 एसडीके के बजाय विंडोज 7 एसडीके का उपयोग करने के लिए विजुअल सी ++ कंपाइलर कैसे कहूं, जो डिफ़ॉल्ट रूप से प्रतीत होता है? क्योंकि '/ SUBSYSTEM निर्दिष्ट करने के अलावा: विंडोज़, 5।01' और '_WIN32_WINNT' और' WINVER' को '_WIN32_WINNT_WINXP (0x0501) पर सेट करना 'मुझे पुराने एसडीके का उपयोग करने की भी आवश्यकता है। –
मुझे विंडोज 7 एसडीके का उपयोग करने की आवश्यकता है क्योंकि विंडोज 8 एसडीके विंडोज एक्सपी का समर्थन करने का दावा नहीं करता है। मैं देखता हूं कि विजुअल सी ++ 2010 विंडोज 7 एसडीके के लिए डिफ़ॉल्ट है, लेकिन मुझे सी ++ 11 की वजह से विजुअल सी ++ 2013 का उपयोग करना है, इसलिए मैं केवल विज़ुअल सी ++ 2010 का उपयोग नहीं कर सकता, मुझे विजुअल सी ++ 2013 बनाना है विंडोज 7 एसडीके का प्रयोग करें। –
ऐसा लगता है कि जिस विज्ञान को मैं पर्यावरण चर सेट करने के लिए बुलाता हूं, 'सी: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 12.0 \ वीसी \ vcvarsall.bat amd64', कॉल' सी: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 12.0 \ वीसी \ बिन \ amd64', जो बदले में '% VS120COMNTOOLS% VCVarsQueryRegistry.bat' (जो 'सी: \ प्रोग्राम फ़ाइलें (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Tools \ VCVarsQueryRegistry.bat' का मूल्यांकन करता है), जो विंडोज 8 एसडीके को इंगित करने के लिए चर सेट अप करने के लिए हार्डकोड किया गया। मुझे किसी और चीज को इंगित करने के लिए कोई स्विच नहीं दिख रहा है, उदाहरण के लिए विंडोज 7 एसडीके। –